免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2244 | 回复: 1
打印 上一主题 下一主题

【c】快速排序的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-05 13:58 |只看该作者 |倒序浏览
下面按照《数据结构和算法》中的快速排序算法写的代码:
#include <stdlib.h>
#include <stdio.h>

#define N 8

void swap(int *x, int *y) {
    int tmp;

    tmp = *x;
    *x = *y;
    *y = tmp;
}

int median(int *a, int left, int right) {
    int center = (left+right)/2;
   
    if ( a[left] > a[center] ) {
        swap(&a[left],&a[center]);
    }
        if ( a[left] > a[right] ) {
        swap(&a[left],&a[right]);
    }
    if ( a[center] > a[right] ) {
        swap(&a[center],&a[right]);
    }
   
    swap(&a[center],&a[right-1]);
        return a[right-1];
}

void quicksort(int *a, int left, int right) {
    int i,j,pivot;
        pivot = median(a,left,right);
    i=left;
    j=right-1;
       
    while(1) {
        while( a[++i] < pivot ) { }
        while( a[--j] > pivot ) { }
        if ( i < j ) {
            swap(&a[i],&a[j]);
        }
        else {
            break;
        }
    }
       
        swap(&a[i], &a[right-1]);
       
        quicksort(a, left, i-1);
        quicksort(a, i+1, right);
}

int main() {
    int arr[N] = {25, 12, 60, 42, 15, 52, 34, 26};
        int k;
    quicksort(arr,0,N-1);
    for ( k=0; k<N; k++ ) {
        printf("%d ",arr[k]);
    }
       
    return EXIT_SUCCESS;
}

但是运行提示段错误,gdb定位到while( a[++i] < pivot ) { } 这一句, 但是没有看出什么问题来? 请问这句问题出在什么地方了?还是别的地方出的问题?

论坛徽章:
0
2 [报告]
发表于 2011-07-05 14:02 |只看该作者
只可能是数组越界吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP