< 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"); */}}
- 个性化购买力分析及在搜索排序上应用
- mysql字符串排序规则_MySQL字符集和排序规则
- 交换链接
- 二层、三层交换机是什么?有什么区别?
- 仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名
- 对链表进行插入排序
- 监控交换机选择:千兆 百兆 核心 PoE 光纤交换机选型指南
- 程序员必须掌握这几种排序算法的最佳实践,包会! 含GIF图 世界十大算法
- 乐器难度排行榜,乐器难度,价钱排序
- 锐捷RSR系列路由器_接入路由器交换模块配置_IP+MAC绑定