自己写的一快速排序算法

昨天写的。在写一趟快排的时候和递归调用的时候卡了好久。后来睡觉前在CSDN上发了个帖,然后迷迷糊糊的觉得递归的时候应该在函数里面再设两个参数就好了,今天早上一去看帖子,一个叫staticabc的朋友帮我实现了,方法给我迷迷糊糊时候想的一样,不过函数递归没有下限而死循环的问题他帮我找出来了,加了一个return就好了。昨天我就被这个问题搞郁闷了。原来这是因为程序死循环了接着栈溢出。泪牛满面啊,真的还有好多路要走。

好歹弄出来了。写得挺难看的,贴出来做个纪念吧。好歹也是我用了N个小时最后做出来的成果。

1 #define MaxLen 256
2 #include <stdio.h>
3 int divide(int*low, int*high, int*array);
4 int i=0;
5 int*l, *h;
6 void main()
7 {
8 int s[MaxLen]={0};
9 printf("你要对多少个数字进行快速排序?\n请输入:");
10 scanf("%d",&i);
11 printf("你要对%d个数字进行快速排序,这个数字序列是:\n",i);
12 if(i>MaxLen)
13 {
14 printf("数字过大,重新输入:");
15 scanf("%d",&i);
16 }
17 for (int k=0; k<i; k++)
18 {
19 scanf("%d",&s[k]);
20 }
21 printf("\n");
22
23
24 l=&s[0];
25 h=&s[i-1];
26 divide(l, h, s);
27
28
29 for (int j=0; j<i; j++)
30 {
31 printf("%3d",s[j]);
32 }
33 printf("\n");
34 }
35
36 int divide(int*low, int*high, int*array)
37 {
38 int*low_=low;
39 int*high_=high;
40 int*pkey= low;
41 if (low>=high)
42 {
43 return0;
44 }
45 while(low_<high_)
46 {
47 while(pkey != high_ )
48 {
49 if (*pkey >*high_)
50 {
51 *pkey^=*high_;
52 *high_^=*pkey;
53 *pkey^=*high_;
54 pkey= high_;
55 }
56 else
57 high_--;
58 }
59 while(pkey != low_)
60 {
61 if (*pkey <*low_)
62 {
63 *pkey^=*low_;
64 *low_^=*pkey;
65 *pkey^=*low_;
66 pkey= low_;
67 }
68 else
69 low_++;
70 }
71 }
72 divide(low, pkey-1, array);
73 divide(pkey+1, high ,array);
74 }
原文地址:https://www.cnblogs.com/xupengzhuo/p/2043306.html