数组排序之选择排序
在刚开始学习数组时,不能很好的使用简单的排序算法,当进行深入学习了一段时间后,才分清楚,今天这里简单的分享一下使用选择排序的算法并进行相关实例。
1. 什么是选择排序?
从字面意思可以理解,就是有选择的进行排序,那么什么是有选择的呢?按照我的理解,就是按照某一种规则(例如从大到小或者从小到大)进行排序,就好像我们去看美女,肯定是先找气质最好的,依次往下,当然按照气质来进行选择的话,这是一个判断条件,是我们的一个标准;而我们所学习的选择排序也是这样。
专业解释:
选择排序是通过每一趟排序过程中从待排序记录中选择出关键字最小(大)的记录,将其依次放在数据表的最前或最后端的的方法来实现整个数据表的有序排列。
思路:
第一趟排序在所有的待排序的n个记录中选出关键字最小的记录,将它与数据表中的第一个记录进行交换位置,使关键字最小的记录处于数据表的最前端;
第二趟在剩下的n-1个记录中再选出关键字最小的记录,将其与数据表中的第二个记录交换位置,使关键字次小的记录处于数据表的第二个位置;
一直重复这样的操作,最终可实现数据表的升序排列。共进行n-1趟排序。
思路图片浅析:
1. 过程走向:
2. 数据举例:
2. 选择排序实现Demo
-
//选择排序算法函数实现 void select_sort(int*arr,int len) { int i =0; int j =0; int index =0;//记录最小记录的位置 int min_value =0;//记录最小值 for(i =0; i < len; i++) { min_value = arr[i]; //获取最小值及其位置 for(index = i, j = i +1; j < len; j++) { if(min_value > arr[j]) { min_value = arr[j]; index = j; } } //交换第i个位置的数值与最小值的位置 arr[index]= arr[i]; arr[i]= min_value; } }
其余的代码
-
//打印输出函数 void print_arr(int*arr,int len) { int i =0; for(i =0; i < len; i++) printf("%d\t", arr[i]); printf("\n"); } int main(void) { int arr[]={12,1,34,3,56,67,23,45,13}; //获取数组长度len int len =sizeof(arr)/sizeof(arr[0]); printf("init\n"); print_arr(arr, len); //调用排序函数 select_sort(arr, len); printf("sort later\n"); print_arr(arr, len); return0; }
运行结果: