手搓
//快速排序 void quick_sort(int s[], int l, int r) { if (l < r) { //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1 int i = l, j = r, x = s[l]; while (i < j) { while(i < j && s[j] >= x) // 从右向左找第一个小于x的数 j--; if(i < j) s[i++] = s[j]; while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数 i++; if(i < j) s[j--] = s[i]; } s[i] = x; quick_sort(s, l, i - 1); // 递归调用 quick_sort(s, i + 1, r); } }
函数
typedef struct node { int flag;//标志在左边还是右边 double x,y; }point; int cmpx(const void *a, const void *b) { point *pa = (point *) a; point *pb = (point *) b; if (pa->x > pb->x) return 1; else if (pa->x < pb->x) return -1; else return 0; } int cmpy(const void *a, const void *b) { int *pa = (int *) a; int *pb = (int *) b; if (temp[*pa].y > temp[*pb].y) return 1; else if (temp[*pa].y < temp[*pb].y) return -1; else return 0; } qsort(temp,j,sizeof(temp[0]),cmpy); qsort(p,n,sizeof(p[0]),cmpx);//这段主要针对结构体进行排序 //对int类型数组排序 int num[100]; int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); //对double类型数组排序 double in[100]; int cmp( const void *a , const void *b ) { return *(double *)a > *(double *)b ? 1 : -1; } qsort(in,100,sizeof(in[0]),cmp);