• 自己写的一快速排序算法


    昨天写的。在写一趟快排的时候和递归调用的时候卡了好久。后来睡觉前在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 }
  • 相关阅读:
    Linux 系统内核空间与用户空间通信的实现与分析
    busybox的一些变化
    switch_root 过程错误分析
    2 NICs on same subnet
    qt 维护x86和arm两套编译环境
    init脚本
    硬件测试
    devfs、sysfs、udev介绍
    原创整理:锐捷S3550系列交换机基本配置命令(二)
    【技术贴】red hat 9.0 找不到www.baidu.com.请检查名称并重试 net虚拟机设
  • 原文地址:https://www.cnblogs.com/xupengzhuo/p/2043306.html
Copyright © 2020-2023  润新知