[問題] 利用遞迴函式寫快速排序法
這是期末作業, 死線是今天
問了一堆人他們都直接丟給我網路上找到的程式碼
嗯, 是看得懂, 但自己想照著原理寫一次
研究幾天了還是不知道自己寫的哪裡不對......
我自己用Dev-C++編譯並執行是跑出這樣的結果
將41 24 76 11 45 64 21 69 19 36排序:
11 19 21 24 36 41 64 45 69 76
就是後半段沒有排完的樣子
而我給另一個同學同樣是用Dev-C++卻是根本跑不出結果然後就當掉了
時間緊迫無法再仔細研究, 只好貼上來
麻煩各位高手幫忙了
#include<iostream>
using namespace std;
void sorting(int array[], int i,int j)
{
int s, f, x;
if(i<j)
{
s=i;
f=j;
x=*(array+s); //記錄軸及頭尾索引
while(i<j)
{
while(x>=*(array+i)) i++; //往右找直到找到大於x的數
while(x<=*(array+j)) j--; //往左找直到找到小於x的數
if(i>=j)
break;
int temp1; //交換
temp1 = *(array+i);
*(array+i) = *(array+j);
*(array+j) = temp1;
}
*(array+s) = *(array+j);
*(array+j) = x; //將軸與j交換
sorting(array, s, j-1); //左邊進行遞迴
sorting(array, j+1, f); //右邊進行遞迴
}
}
int main()
{
int number[10]={41,24,76,11,45,64,21,69,19,36};
cout << "將" ;
for(int k=0;k<=9;k++)
cout << number[k] << '\t';
cout << "排序:" << endl;
sorting(number, 0, 9);
for(int k=0;k<=9;k++)
cout << number[k] << '\t';
system("pause");
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.43.139.152
推
06/24 14:47, , 1F
06/24 14:47, 1F
→
06/24 14:55, , 2F
06/24 14:55, 2F
→
06/24 14:58, , 3F
06/24 14:58, 3F
→
06/24 14:58, , 4F
06/24 14:58, 4F
推
06/24 14:59, , 5F
06/24 14:59, 5F
發現i>=s和j<=f的條件似乎沒有必要, 感謝
※ 編輯: etyiting 來自: 115.43.139.152 (06/24 15:07)
→
06/24 15:21, , 6F
06/24 15:21, 6F
→
06/24 15:22, , 7F
06/24 15:22, 7F
→
06/24 15:23, , 8F
06/24 15:23, 8F
推
06/24 15:24, , 9F
06/24 15:24, 9F
→
06/24 15:32, , 10F
06/24 15:32, 10F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章