博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归实现快速排序
阅读量:3951 次
发布时间:2019-05-24

本文共 2158 字,大约阅读时间需要 7 分钟。

所有查找中Hash查找效率最高,在所有排序中,快速排序的效率也是最高的。

采用递归函数的方法来实现快速排序!

  • 先把递归框架搭建起来!!!
  • 递归框架,首先确定终止条件,那就是当 low >= hight的时候!!!
  • 然后确定递归操作,已经知道每一次拆分会产生两个区间,又要对两个区间各自进行拆分!
  • 对于拆分操作,输入的是列表和low、hight,返回的是拆分好后,基准值的下标!!!
  • 对于拆分出来的两个区间的再次拆分,根据上次拆分的基准值下标来确定这两个区间的low、hight
  • 在拆分的时候,low和hight都往中间靠拢,最后low和hight是要重合的,这个重合的位置就是基准值要存放的位置,也是要返回的位置.
  • 外层的循环在内层循环中还要考虑。
  • 当low与hight交换之后,接着从另一端开始继续遍历
  • 判断的时候是利用基准值tmp判断,交换的时候却是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/

你可能感兴趣的文章
1029 旧键盘 (20 分)
查看>>
Prime Ring Problem HDU - 1016 ( 搜索DFS )
查看>>
棋盘问题 POJ - 1321 ( 搜索 DFS)
查看>>
非常可乐 HDU - 1495 ( 搜索 BFS )
查看>>
2698:八皇后问题 OpenJ_Bailian - 2698 ( 搜索 DFS )
查看>>
2754:八皇后 OpenJ_Bailian - 2754 ( 搜索 DFS )
查看>>
1027 打印沙漏 (20 分)
查看>>
1028 人口普查 (20 分)
查看>>
Numbers HDU - 5585
查看>>
1030 完美数列 (25 分)
查看>>
1031 查验身份证 (15 分)
查看>>
1032 挖掘机技术哪家强 (20 分)
查看>>
1033 旧键盘打字 (20 分)
查看>>
Longest k-Good Segment CodeForces - 616D ( 尺取法)
查看>>
二叉搜索树的实现(BST)(插入+删除+查找+各种遍历+高度)
查看>>
今夕何夕 HDU - 6112 ( 模拟 )
查看>>
Dividing HDU - 1059 ( 多重背包 - 二进制简化 )
查看>>
Robberies HDU - 2955 ( 0-1背包 )
查看>>
FATE HDU - 2459 ( 二维完全背包 )
查看>>
B. Working out CodeForces - 429B (动态规划)
查看>>