冒泡排序:
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { //从小到大排 int a[10]={4,1,3,2,0,6,5,7,9,8}; int ex=0; int i=0; int j=0; for( i=0;i<10;i++) { for( j=0;j<9-i;j++)//唯一需要注意的地方,j<9-i,最大为8,因为下面用到j+1可以到达9 { if(a[j]>a[j+1]) { ex=a[j+1]; a[j+1]=a[j]; a[j]=ex; } } } for(i=0;i<10;i++) printf("%d ",a[i]); }
快速排序:找个pivot,小的放左边,大的放右边
#include<stdio.h> #include<stdlib.h> void qsort(int a[],int left,int right) { int pivot=a[left];//把a[left]交给pivot,那么a[left]就等于空了,因此从右边开始找大的,放在a[left]下 //下面三个参数都是为了递归定义的 int start=left; int end=right; int index; while(left<right){ while(a[right]>=pivot&&left<right) { right--; } if(a[right]<pivot) { a[left]=a[right]; } while(a[left]<=pivot&&left<right) { left++; } if(a[left]>pivot) { a[right]=a[left]; } } a[left]=pivot; index=left;//把现在中间的下标给index(也可以写做index=right) if(start<index) qsort(a,start,index-1); if(end>index) qsort(a,index+1,end); } int main() { int a[10]={8,5,6,2,3,4,9,1,7,10}; qsort(a,0,9); for(int i=0;i<10;i++) { printf("%d ",a[i]); } return 0; }
插入排序:
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { //从小到大排, int i=0; int j=0; int a[10]={4,1,3,2,0,6,5,7,9,8}; for(i=2;i<10;i++)//a[0]是监视哨,a[1]是最初的有序序列,所以从i=2出发 { a[0]=a[i]; j=i-1; while(a[0]<a[j]) { a[j+1]=a[j]; j--;//无序插有序,前面是有序,所以j-- } a[j+1]=a[0];//换完之后a[0]算大的(比a[j]大),放后面(a[j+1]) } for(i=1;i<10;i++) printf("%d ",a[i]); }