本文共 2158 字,大约阅读时间需要 7 分钟。
所有查找中Hash查找效率最高,在所有排序中,快速排序的效率也是最高的。
采用递归函数的方法来实现快速排序!
low >= hight
的时候!!!代码
#include#include #include int quick_sort(int *, int , int);int partion(int *, int, int);int main(int argc, const char* argv[]){ int i, n; printf("input the num:"); scanf("%d", &n); int *num = (int*)malloc(sizeof(int) * n); srand((unsigned)time(NULL)); for (i = 0; i < n; i++) { num[i] = rand() % 100; } printf("the rand num is:"); for (i = 0; i < n; i++) { printf("%2d ", num[i]); } puts(""); quick_sort(num, 0, n-1); printf("quick_sort num :"); for (i = 0; i < n; i++) { printf("%2d ", num[i]); } puts(""); free(num); return 0;}int quick_sort(int *num, int low, int hight){ int i; //记录基准值下标 if (num == NULL) { printf("num is NULL!\n"); return -1; } if (low >= hight) return 0; i = partion(num, low, hight); //拆分操作 quick_sort(num, 0, i - 1); //左区间排序 quick_sort(num, i + 1, hight); //右区间排序 return 0;}int partion(int *num, int low, int hight){ int tmp = num[low]; //基准点要先保存好 while (low < hight) { while ((low < hight) && (tmp <= num[hight])) { //始终与基准值比较 hight--; } num[low] = num[hight]; //找到要交换的就之间交换 while ((low < hight) && (tmp >= num[low])) { //交换之后就从另一端开始比较 low++; } num[hight] = num[low]; } num[low] = tmp; //low hight重合的时候就是说基准值的位置 return low; //返回基准值的最终位置}
转载地址:http://atwzi.baihongyu.com/