| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 630 人关注过本帖, 2 人收藏
标题:快速排序法为什么不能运行
只看楼主 加入收藏
genius023
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-7-7
收藏(2)
 问题点数:0 回复次数:4 
快速排序法为什么不能运行
编译通过了,可是不能运行,就是exe要关闭
各位帮忙看看哪有问题。


#include <stdio.h>
#include   <stdlib.h>  

void quick(int *a,int i,int j)
{
    int m,n,t;
    t=a[0];
    m=i;
    n=j;
    while(n<m)
    {
    while(a[m]<t&&m<j)
    m++;
    if(n<m)
    a[n++]=a[m];
    while(a[n]>t&&n>i)
    n--;
    if(n<m)
    a[m--]=a[n];
}
    a[n]=t;
    quick(a,i,m-1);
    quick(a,m+1,j);
   
}
   

int main(void)
{   int n[5];
    int i;
   
    for (i=0;i<5;i++)
    scanf("%d",&n[i]);
    quick(n,0,5);
    for (i=0;i<5;i++)               
                    
                     
    printf("%d",n[i]);   
    system("pause");
    return 0;
        
}
搜索更多相关主题的帖子: 运行 
2008-09-24 17:57
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
快排
程序代码:
#include<stdio.h>
#include<string.h>
#define N 10
void quick(int i,int j,int a[])
{
    int tmp,I,J,V;
    I=i,J=j;
    V=a[(i+j)/2];
    while(1)
    {
        while(i<J&&a[i]<V)
            i++;
        while(j>I&&a[j]>V)
            j--;
        if(i>j)    break;
        if(i<j)
        {
            tmp=a[i];
            a[i]=a[j];
            a[j]=tmp;
        }
        i++;
        j--;
    }
    if(i<J)    quick(i,J,a);
    if(j>I)    quick(I,j,a);
}
int main(void)
{
    int a[N],i;
    for(i=0;i<N;i++)
        scanf("%d",&a[i]);
    quick(0,N-1,a);
    for(i=0;i<N;i++)
        printf(" %d",a[i]);
    puts("");
    return 0;
    getch();
}
2008-09-24 18:41
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

void quick(int *a,int i,int j)
{
    int m,n,t;
    int tmp;
    t=a[i];
    m=i;
    n=j;
    while(m<n)
    {
        while(a[m]<t&&m<j)
            m++;
     /*   if(n<m)
            a[n++]=a[m];   这行貌似没用,不用它 */
        while(a[n]>t&&n>i)
            n--;
     /*   if(n<m)
        a[m--]=a[n];  这行也是,没弄明白 */
     /*  新增个转换过程 */
        if(m<n)
        {
            tmp=a[m];
            a[m]=a[n];
            a[n]=tmp;
        }
        m++;
        n--;
    }
  /*  a[n]=t;        这行也不知道是做什么的,不用它 */
  /*  递归条件没列出,增列条件 */
    if(i<n)
        quick(a,i,n);
    if(j>m)
        quick(a,m,j);
    
}
    

int main(void)
{   int n[5];
    int i;
    
    for (i=0;i<5;i++)
        scanf("%d",&n[i]);
    quick(n,0,4);   /* 传递数组长度值时不对,应该是4 */
    for (i=0;i<5;i++)               
        printf(" %d",n[i]);
    printf("\n");
    system("pause"); 
    return 0;
        
}
2008-09-24 19:09
caoxh0415
Rank: 2
等 级:论坛游民
帖 子:125
专家分:23
注 册:2008-4-24
收藏
得分:0 
有没有高手修改下这个程序啊 !顺便解释下每个步骤的用意!!
我也是个初学者,希望高手指教。
2008-09-25 00:10
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
void swap(int* a,int *b)
{
   int temp=*a;
   *a=*b;
   *b=temp;
}
int partition(int *arr,int l,int r)
{
   int p=l,q=r,key=arr[l];
   for(++p;p<q;)
   {
     for(;arr[p]<=key;++p);
     for(;arr[q]>key;--q);
     swap(&arr[p],&arr[q]);
    }
    swap(&arr[p],&arr[q]);
    swap(&arr[l],&arr[q]);
    return q;
}
void qsort(int*arr,int l,int r)
{
   if(l<r)
   {
       int p=partition(arr,l,r);
       qsort(arr,l,p-1);
       qsort(arr,p+1,r);
    }
}

樱花大战,  有爱.
2008-09-25 07:42
快速回复:快速排序法为什么不能运行
数据加载中...
 
   



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

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