程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c-求修改快速排序的代碼

c-求修改快速排序的代碼

編輯:編程綜合問答
求修改快速排序的代碼

#include
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
void quicksort(int k[],int s,int t)
{
int i,j=t+1;
i=s;
while(1)
{
do i++;
while(!(k[i]>=k[s]||i==t));
do j--;
while(!(k[j]<=k[s]||j==s));
if(i<j)
swap(&k[i],&k[j]);
else
break;
}
swap(&k[s],&k[j]);
quicksort(k,s,j-1);
quicksort(k,j+1,t);
}
int main()
{
int i;
int k[10]={2,5,6,3,7,8,0,9,12,1};
for(i=0;i<10;i++)
{
printf("%d ",k[i]);
}
printf("\n");
quicksort(k,0,9);

for(i=0;i<10;i++)
printf("%d ",k[i]);

}

為什麼第二個循環搞不出來。顯示不出排序後的結果

最佳回答:


缺少結束判斷:


#include <stdio.h>
void swap(int *a,int *b)
{
    int temp=*a;
    *a=*b;
    *b=temp;
}
void quicksort(int k[],int s,int t)
{
    int i,j=t+1;
    i=s;
    if(s>=t) return; //增加
    while(1)
    {
        do i++;
        while(!(k[i]>=k[s]||i==t));
        do j--;
        while(!(k[j]<=k[s]||j==s));
        if(i<j)
            swap(&k[i],&k[j]);
        else
            break;
    }
    swap(&k[s],&k[j]);
    quicksort(k,s,j-1);
    quicksort(k,j+1,t);
}
int main()
{
    int i;
    int k[10]={2,5,6,3,7,8,0,9,12,1};
    for(i=0;i<10;i++)
    {
        printf("%d ",k[i]);
    }
    printf("\n");
    quicksort(k,0,9);

    for(i=0;i<10;i++)
        printf("%d ",k[i]);
    printf("\n");
}

qq_27183003
qq_31715799
qq_31715799
qq_31715799
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved