简单选择排序是经常用到的一种排序算法.
原理:
1.简单选择排序一句话概括:每次选择无序数列中最小的将其放在有序数列的最后。
2.在简单选择排序中,我们用初始化的数字int a[6]={2,5,6,3,1,4}
3.算法基本执行步骤1:找到初始的无序数组中最下的数,将其放在数组的头部。交换最小数和数组头部元素即可(这是与冒泡有区别的地方)。
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 /* 5 * 简单选择排序一句话概括:每次选择无序数列中最小的将其放在有序数列的最后。 6 * 二、在简单选择排序中,我们用初始化的数字int a[6]={2,5,6,3,1,4} 7 * 三、算法基本执行步骤1:找到初始的无序数组中最下的数,将其放在数组的头部。交换最小数和数组头部元素即可(这是与冒泡有区别的地方)。 8 */ 9 10 //替换 11 void swap(int a[],int i,int j){ 12 int temp = a[i]; 13 a[i] = a[j]; 14 a[j] = temp; 15 } 16 17 //快速排序 18 void select_sort(int a[],int l) 19 { 20 // l = 6 21 int i,temp,j,k; 22 /* 23 * 推导过程 2,5,6,3,1,4 24 * i = 0 temp = 2 ,k =0 搜索到最小值1, k = 4 -> 1,5,6,3,2,4 25 * i = 1 temp = 5 ,k =1搜索到最小值2, k = 4 -> 1,2,6,3,5,4 26 * i = 2 temp = 6 ,k =2搜索到最小值3 k = 3 -> 1,2,3,6,5,4 27 * i = 3 temp = 6 ,k =3搜索到最小值4 k = 5 -> 1,2,3,4,5,6 28 * i = 4 temp = 5 ,k =4搜索不到 k = 4 k和i相同不做任何操作 29 */ 30 31 //最后一次不用循环 32 for (i=0;i<l-1;i++){ 33 //获取头元素的值 34 temp = a[i]; 35 k = i; 36 37 //printf("%d\n",temp); 38 //从第i+1 元素开始查找,如果找到比首元素小就替换 39 for (j = i+1;j<l;j++){ 40 41 if (a[j] < temp){ 42 //先记录下来最小值 43 temp = a[j]; 44 k = j; //最小值的下标 45 } 46 } 47 48 //替换 49 if ( i != k ) 50 swap(a,i,k); 51 } 52 53 } 54 55 void main() 56 { 57 int a[] = {2,5,6,3,1,4}; 58 int i,l = sizeof(a) / sizeof(int); 59 60 //选择排序 61 select_sort(a,l); 62 63 printf("选择排序后:\n"); 64 for ( i = 0; i < l; ++i) { 65 printf("%d\n",a[i]); 66 } 67 68 }