自己写的一快速排序算法

昨天写的。在写一趟快排的时候和递归调用的时候卡了好久。后来睡觉前在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 return 0 ;
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/archive/2011/05/11/2043306.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值