| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1431 人关注过本帖
标题:这段代码为什么没法实现快速排序
只看楼主 加入收藏
Superstone
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-7-21
结帖率:66.67%
收藏
已结贴  问题点数:18 回复次数:6 
这段代码为什么没法实现快速排序
int swap(int *a,int *b)
{
    *a^=*b;
    *b^=*a;
    *a^=*b;
}
int sort(int *a,int m,int n)
{
    int i=m,j=n;
    int num=a[i];
    if((n-m)==1)
        return;
    while(i<j)
    {
        while(i<j&&num<a[j])
        j--;
        swap(&a[i],&a[j]);
        while(i<j&&num >a[i])
            i++;
        swap(&a[i],&a[j]);
    }
    a[i]=num;
    sort(a,m,i-1);
    sort(a,i+1,n);
}
搜索更多相关主题的帖子: return 
2016-08-08 19:27
Superstone
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-7-21
收藏
得分:0 
报错是指针问题
2016-08-08 19:31
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
收藏
得分:9 
//快速排序算法
  1 #include <stdio.h>
  2
  3 int max(int arr[], int L, int R) { //排序函数 arr排序数组 L数组最左边 R数组最右边
  4         int i,j,k,t;
  5         k = arr[(L+R) / 2];
  6         i = L;
  7         j = R;
  8         while (i <= j) {
  9                 while (arr[i] < k) { //i 右移找大于k的值
 10                         i++;
 11                 }      
 12                 while (arr[j] > k) { //j 左移找小于k的值
 13                         j--;
 14                 }      
 15                 if (i <= j) {
 16                         //交换 arr[i] 与 arr[j] 的值
 17                         t       = arr[i];
 18                         arr[i]  = arr[j];
 19                         arr[j]  = t;
 20                         i++; //i 右移一位 下次循环从 arr[i+1] 开始找
 21                         j--; //j 左移一位 下次循环从 arr[j--] 开始找
 22                 }      
 23         }      
 24         if (L < j) {
 25                 max(arr, L, j);
 26         }      
 27         if (i < R) {
 28                 max(arr, i, R);
 29         }      
 30 }      
 31
 32 int main() {
 33         int arr[10] = {3, 10, 9, 7, 5, 4, 6, 2, 8, 1}; //初始化乱序1~10数组值
 34         int i;
 35         max(arr, 0, 9); //调用排序
 36         for (i = 0; i < 10; i++) {
 37                 printf("%d\n", arr[i]); //输出排序后数组
 38         }
 39
 40         return 0;
 41 }
2016-08-08 19:53
Superstone
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-7-21
收藏
得分:0 
回复 3楼 FQYB
大神 我不是求快速代码 我只是代码错误 我不能理解能帮我看看 哪里有问题么 每次快速排序的i和j的值是一样的 我的到后来就会出现i j值不等的情况
2016-08-08 20:36
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
收藏
得分:0 
理解我的代码

//快速排序算法 思想
设数组arr[n] = {3, 10, 9, 7, 5, 4, 6, 2, 8, 1}

        1.      L R 分别为数组的最左边与最右边的下标 故 L = 0  R = n 并赋给i j
                取一个中间值 arr[(L+R) / 2] 为基点k

         L            k              R
         3  10  9  7 (5) 4  6  2  8  1
         ^                           ^
         i                           j

        2.      i 右移找大于 k 的值 arr[i]  j 左移找小于 k 的值 arr[j]

         L            k              R          L            k              R
         3 [10] 9  7 (5) 4  6  2  8 [1]         3  1 [9] 7 (5) 4  6 [2] 8  10           ......
            ^                        ^                ^              ^
            i                        j                i              j

        3. 若 i <= j  则交换 arr[i] 与 arr[j] 的值 转到第2步

         L            k              R          L           k               R
         3  1  9  7 (5) 4  6  2  8  10          3  1  2  7 (5) 4  6  9  8  10           .....
            ^                       ^                 ^              ^
            i                       j                 i              j

        4. 若 i > j  说明i与j已错开 一趟快速排序完成 k左边的值小于k  k右边的值大于k
                则对 arr[L] ~ arr[j] 和 arr[i] ~ arr[R] 递归进行下一趟快速排序

         L           k              R
         3  1  2  4 (5) 7  6  9  8  10
                  ^       ^
                  j        i


[此贴子已经被作者于2016-8-9 00:35编辑过]

2016-08-08 21:52
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:9 
if((n-m)==1)
        return;


这里错了,改成 if (n >= m) 就可以了

Read The Fucking Source Code~
2016-08-08 23:52
Superstone
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:11
专家分:0
注 册:2016-7-21
收藏
得分:0 
回复 6楼 zx315
了解了
2016-08-09 11:37
快速回复:这段代码为什么没法实现快速排序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042745 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved