最近看排序和查找.今天整了这两个排序.打它记下来免得以后到处找资料.... #include <stdio.h> // //快速排序 //说明:打一组数分面若干小块,其中要一个关键值(在这个数之前的比它小之后的比它大) // 然后递归再分块,把前面比它小的部分和比它大的部分再次找出一个关键值进行分块 // 此处有和折半查找很相似 // int pai(int *p,int low,int hig) { int key=p[low]; while(low<hig) { while(low<hig&&p[hig]>=key) --hig; p[low]=p[hig]; while(low<hig&&p[low]<=key) ++low; p[hig]=p[low]; } p[low]=key; return low; } void st(int *p,int low,int hig) { int mid=0; if(low<hig) { mid=pai(p,low,hig); st(p,low,mid-1); st(p,mid+1,hig); } } / //直接插入法排序 //说明:每次取出一个数,与前面已经排好序的进行比较,找到适合的位置插入. / void insertsort(int *a,int n) { int i,j; int t; for (i=1;i<n;i++) { t=a[i]; j=i-1; while((j>=0)&&(t<a[j])) { a[j+1]=a[j]; j--; } a[j+1]=t; } } main() { int i,a[11]={40,11,12,5,6,13,8,9,14,7,10}; for(i=0;i<11;printf("%3d",a[i]),++i); printf("/n"); st(a,0,11); for(i=0;i<11;printf("%3d",a[i]),++i); //printf("/n"); //insertsort(a,11); //for(i=0;i<11;printf("%3d",a[i]),i++); printf("/n"); } 2010-06-03 16:45:39