目录
一、什么是选择排序?
二、选择排序思路
三、排序过程
四、代码的实现
一、什么是选择排序?
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的中数据元素选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
二、选择排序思路
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
三、排序过程
例:定义一个数组 int a[8] = {9,3,7,2,6,1,5,8},要求利用选择排序的方法将数组从小到大排序。
排序的次数:因为每排好一个元素,那么所需要排的元素个数减一,直到排到倒数第二个元素停止,将倒数第二个元素也排好后,整体数组排序就完成了。所以排序的次数 = 元素个数 – 1。(冒泡排序的排序次数与该排序的排序次数计算方法相同)
9,3,7,2,6,1,5,8 |
第一次排序:假设首元素作为整体元素数据最小值,然后从该元素的后一个元素开始每个元素都与该最小值进行比较,假如有比该元素小的值,就用一个变量去记住下标值,最后比较完成后,把两个元素互换位置即可。
第一次排序结果:{1,3,7,2,6,9,5,8}
1,3,7,2,6,9,5,8 |
第二次排序:因为第一次排序选择的是将首元素作为最小值,最终经过互换位置,首元素排序完成,第二次排序就不需要排序首元素,只需要排序除首元素以外的元素,然后在依照第一次排序的原理进行排序。
第二次排序结果:{1,2,7,3,6,9,5,8}
然后根据第一次排序和第二次排序的原理,最终的排序结果为:{1,2,3,5,6,7,8,9}
四、代码的实现
#include void arr_out(int a[8])//输出函数{int i = 0;for(i = 0;i < 8;i++){printf("%d ",a[i]);}printf("\n");}void arr_sort(int *p,int n){int i,j;int min = 0;for(i = 0;i < n - 1;i++)//排序次数{min = i;for(j = i + 1;j < n;j++){if(p[j] < p[min]){min = j;//记录交换的元素下标值}}if(i != min){int temp = p[i];p[i] = p[min];p[min] = temp;}}}int main(){int a[8] = {0};int i = 0;for(i = 0;i < 8;i++){scanf("%d",&a[i]);}arr_sort(a,8);//排序函数arr_out(a);//输出函数return 0;}