dataStructure_交换排序:简单选择排序SelectionSort/堆( 三 )

< n; j++){/* 参数i是固定的,而参数j在递增 */update_min_loc(a, &min_loc, j);}/* 判断:必要时交换元素 *//* 最终的得到的min_loc和初始值i比较,看是否变化了,当然,也可不比较直接交换. */if (min_loc != i){swap_float_pointer(a + i, a + min_loc);}}// 确保位置i上的元素在[i~n]范围内是最小的void set_next_most_v2(float *a, int n, int i){/*每一趟:外重循环从LHS∈[0,n-2]中选定一个LHS,内重循环控制该趟排序的一系列比较中,使RHS∈[LHS+1,n-1]全部依次与该趟指定的这个LHS作比较 */for (int j = i + 1; j < n; j++){set_minor_elem(a, i, j);}}void select_sort(float *a, int n)/* 在内部计数数组的元素个数要求传入的数组有做结尾处理/规整的初始化,干脆就调用该函数之前计数下元素个数 */{/*LHS表示关系表达式的左边;RHS表示关系表达式的右边;选中排序:每趟排序共用同一个LHS;单趟排序中:*/for (int i = 0; i < n - 1; i++){// set_next_most(a, n, i);set_next_most_v2(a, n, i);}}int main(int argc, char const *argv[]){float l[7] = {5, 2, 8, 0, 4, 3, 2};int n = 7;select_sort(l, n);for (int i = 0; i < n; i++){printf("%.0f,", l[i]);}return 0;}
一体化版
/* 选择排序法_实数排序: (升序版)有助于增强理解的特征:最大比较区间的次数为n-1次 ;最小长度比较区间比较的次数为1次.*/void sort_select_float(float *a,int n_elements)/* 在内部计数数组的元素个数要求传入的数组有做结尾处理/规整的初始化,干脆就调用该函数之前计数下元素个数 */{int min = 0 ;int j = 0;float temp = 0;/*LHS表示关系表达式的左边;RHS表示关系表达式的右边;选中排序:每趟排序共用同一个LHS;单趟排序中:*/for(int i = 0;i < n_elements - 1;i++){min = i;/* 找到最小元素所在位置,这里比较边界是将左边界收缩,而右边界不变. *//*指出比较范围和比较对象*//*每一趟:外重循环从LHS∈[0,n-2]中选定一个LHS,内重循环控制该趟排序的一系列比较中,使RHS∈[LHS+1,n-1]全部依次与该趟指定的这个LHS作比较 */for( j = i+1 ; j < n_elements ;j++){if(a[min] > a[j]){min = j;}}/* 交换元素 */if(min != i)/* 最终的得到的min和初始值i比较,看是否变化了,当然,也可不比较直接交换. */{/* 注意不是a[i]和a[j]交换(bubble才这样.) */temp = a[i];a[i] = a[min];a[min] = temp;//printf("%f ",a[i]);}/*监视每一趟的排序结果. for(int i = 0;i < n_elements -1;i++) printf("%f ",a[i]);printf("\n\n"); */}}