先立一个flag在这边,等会儿慢慢补全。。。。。
冒泡排序:
1 void bubble_sort(int a[],int n) //每一次循环都产生一个最大数在末尾,所以下面一次循环就不需要比较了 2 3 { 4 5 int i,j,temp; 6 7 for(j=0;j<n-1;j++) 8 9 for(i=0;i<n-1-j;i++) 10 11 { if(a[i]>a[i+1]) 12 13 { 14 15 temp=a[i]; 16 17 a[i]=a[i+1]; 18 19 a[i+1]=temp; 20 21 } 22 } 23 24 }
选择排序:
//每次从待排序的数据元素中选出最小(或最大)存放在序列的起始位置
1 void select_sort(int a[],int n)//循环的次数和冒泡排序类似 2 { 3 int i,j,min,t; 4 for(i=0;i<n-1;i++) 5 { 6 min=i;//查找最小值 7 for(j=i+1;j<n;j++) 8 if(a[min]>a[j]) 9 min=j;//交换 10 if(min!=i)//这句可加可不加 11 { 12 t=a[min]; 13 a[min]=a[i]; 14 a[i]=t; 15 } 16 } 17 }
插入排序:
//这里讨论的主要是直接插入排序(其他的还有折半插入排序)
//插入排序说白了就是一串数字,从第二个数字开始,每次向后看一个数字,然后把这个数字和前面的若干个数字比较,看比前面的大或者小就插上去
1 void insertion_sort(int a[],int n) 2 { 3 int i,j; 4 int temp; 5 for(i=1;i<n;i++) 6 { 7 temp=a[i]; 8 j=i-1; 9 //和已经排序好的数逐一比较,大于temp时,该数移后 10 while((j>=0)&&(a[j]>temp)) 11 { 12 a[j+1]=a[j]; 13 j--; 14 } 15 //存在大于temp 的数 16 if(j!=i-1)//当挪到最前面的时候j=-1 17 a[j+1]=temp; 18 } 19 }