[問題] QuickSort的問題
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
QuickSort當有重複值時出問題,程式停住
希望得到的正確結果:
希望QuickSort能跑出正確的排序結果
程式跑出來的錯誤結果:
多次的試驗發現,當10個數中沒有相同值的時候程式可以跑
但如果有相同值就不動了= =
找了很久卻搞不清楚問題出在哪裡....
希望版友們幫忙解惑...
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
C++
有問題的code: (請善用置底文標色功能)
#include <iostream>
#include <time.h>
#define MAX 10
int A[10]={0};
void RandomNum() //產生10個亂數值之副程式
{
int i;
srand((unsigned)time(NULL)); //亂數值初始化
printf("產生10個亂數值:");
for (i = 0; i < MAX; i++)
{
A[i] = rand() % 90+10; //產生10~99的整數亂數值
printf("%4d",A[i]);
}
}
void QuickSort(int A[], int left, int right)
{
int i, j,temp,pivot;
//s = A[(left+right)/2];
i = left;
j = right;
pivot=A[left]; //指標設定於左邊起始點
if(i < j)
{
while(i<j) //當i在j左方時
{
while(A[i] < pivot)
{
i++; // i向右找大於pivot者
if(i> MAX-2)
break;
}
while(A[j] >pivot)
{
j--; // j向左找小於pivot者
if(j< 1)
break;
}
if(i < j)
{
//交換A[i]與A[j]
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
//交換pivot與A[j]
temp=A[j];
A[j]=pivot;
pivot=temp;
QuickSort(A, left, j-1); // 對左邊進行遞迴
QuickSort(A, j+1, right); // 對右邊進行遞迴
}
}
void PrintQuickSort(int A[], int n)
{
printf("排序10個亂數值:");
for (int i = 0; i < n; i++)
{
printf("%4d",A[i]);
}
}
int main() //主程式
{
RandomNum(); //呼叫產生10個亂數值的副程式
printf("\n");
QuickSort(A, 0, MAX-1); //呼叫快速排序法的副程式
PrintQuickSort(A, MAX); //呼叫快速排序後的結果之副程式
printf("\n");
//system("PAUSE");
return(0);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.122.76.177
→
03/04 21:10, , 1F
03/04 21:10, 1F
推
03/04 21:19, , 2F
03/04 21:19, 2F
→
03/04 21:21, , 3F
03/04 21:21, 3F
→
03/04 21:22, , 4F
03/04 21:22, 4F
推
03/04 21:31, , 5F
03/04 21:31, 5F
推
03/04 21:37, , 6F
03/04 21:37, 6F
→
03/04 21:41, , 7F
03/04 21:41, 7F
→
03/04 21:52, , 8F
03/04 21:52, 8F
推
03/04 21:54, , 9F
03/04 21:54, 9F
→
03/05 00:47, , 10F
03/05 00:47, 10F
推
03/05 02:01, , 11F
03/05 02:01, 11F
→
03/05 02:02, , 12F
03/05 02:02, 12F
討論串 (同標題文章)