| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 515 人关注过本帖
标题:关于 int k ;位置的问题,求大神解惑
只看楼主 加入收藏
浮生若云
Rank: 1
来 自:湖北武汉新洲
等 级:新手上路
帖 子:11
专家分:3
注 册:2014-6-17
结帖率:100%
收藏
已结贴  问题点数:18 回复次数:6 
关于 int k ;位置的问题,求大神解惑
//程序目的:实现快速排序法
//程序问题:主函数中的定义,k和s[n]顺序不同,得到的基数下标不同,而且a[0]的值会出错。求解惑
//备注:程序递归排序部分被省略了,完整程序已附件
排序法_05快速排序法_用递归.zip (1.36 KB)

#include<stdio.h>
#define N 10

void out_array(int a[],int n)  //输出数组
{
    int i;
    for(i=0;i<n;i++)
        printf("a[%d] = %d\n",i,a[i]);
}

int k_array(int a[],int L,int R)  //快速排序法第一步:求得基数
{
    int i,j,k;
    i = L;
    j = R;
    k = a[0];

    while(i<j)   
    {
        while(i<j&&k<=a[j])    //从右到左,找到第一个比k小的
            j--;
        if(i<j)
        {
            a[i] = a[j];
            i++;
        }

        while(i<j&&k>a[i])    //从左到右,找到第一个比k大的
            i++;
        if(i<j)
        {
            a[j] = a[i];
            j--;
        }
    }

    a[i] = k;    //退出时将基数填在中间坑里面
    return i;
}

void main()
{
/*    int k;
    int s[N] = {99,58,2,61,49,108,28,76,38,44};
*/
    int k;
    int s[N] = {99,58,2,61,49,108,28,76,38,44};


    printf("the first output array :\n");
    out_array(s,N);

    printf("the sceond output array :\n");
    k = k_array(s,0,N);

    out_array(s,N);
    printf("\n");
    printf("k = %d\n",k);

}
搜索更多相关主题的帖子: include 
2014-06-24 17:23
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:9 
不是很明白你说的意思,你仔细检查下你的代码。

我不是砖家,要努力成为砖家。
2014-06-25 16:50
杨唐卫
Rank: 2
等 级:论坛游民
帖 子:24
专家分:23
注 册:2014-4-16
收藏
得分:9 
你的代码很费解,你的变量i,j在k_array函数中的作用是什么,为什么要反复判断i<j,跳出循环时i<j就不成立啊,本人认为没必要。
2014-06-25 22:02
杨唐卫
Rank: 2
等 级:论坛游民
帖 子:24
专家分:23
注 册:2014-4-16
收藏
得分:0 
在函数里面数组越界,将未知单元的数a[10]赋给了a[0]结果出现了乱码。
2014-06-25 22:31
浮生若云
Rank: 1
来 自:湖北武汉新洲
等 级:新手上路
帖 子:11
专家分:3
注 册:2014-6-17
收藏
得分:0 
回复 2 楼 砖家的谎言
好的,我再认真推几遍

勤学如春起之苗,不见其增,日有所长;
辍学如磨刀之石,不见其损,日有所亏;
2014-06-27 10:56
浮生若云
Rank: 1
来 自:湖北武汉新洲
等 级:新手上路
帖 子:11
专家分:3
注 册:2014-6-17
收藏
得分:0 
回复 3 楼 杨唐卫
你好,这个是我最近在弄懂排序法,关于快速排序法,用递归调用的方法还没有理解全面;
而这个程序是我仿照博客里面的理解写成的,但是这两天我仔细理解了一下他递归的位置,似乎有些偏差。
这个是网址:http://

函数k_array(int a[],int i,intj)的作用是求基数的下标,用a[0]把数组分为两部分,左边都是比基数小,右边都比他大。
然后通过递归调用不断的取基数,不断的分割小;

然后我就没理解透彻了,感觉这样子取基数似乎会漏掉个别数。导致结果错误。

勤学如春起之苗,不见其增,日有所长;
辍学如磨刀之石,不见其损,日有所亏;
2014-06-27 11:01
浮生若云
Rank: 1
来 自:湖北武汉新洲
等 级:新手上路
帖 子:11
专家分:3
注 册:2014-6-17
收藏
得分:0 
回复 4 楼 杨唐卫
谢谢你的回答,我有个地方没理解透。
k_array()函数返回值是i,i是个整数。
请问是哪一处代码出现越界赋值呢?

勤学如春起之苗,不见其增,日有所长;
辍学如磨刀之石,不见其损,日有所亏;
2014-06-27 11:07
快速回复:关于 int k ;位置的问题,求大神解惑
数据加载中...
 
   



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

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