[問題] Quicksort選mid為pivot出現問題
開發平台(Platform): Win10
編譯器: GCC
額外使用到的函數庫(Library Used): 無
問題(Question):試著優化Quicksort,選mid為pivot和選end結果不同
,選end結果正確,mid卻無法sort,請各位幫我看看程式哪裡有錯
P.S. 註解處為選end為pivot
餵入的資料(Input):9 4 1 6 7 3 8 2 5
預期的正確結果(Expected Output):1 2 3 4 5 6 7 8 9
錯誤結果(Wrong Output): 未顯示
程式碼(Code):
#include <iostream>
using namespace std;
const int n = 9;
void swap(int &a, int &b)
{
int t = a;
a = b;
b = t;
}
int Partition(int *list, int front, int end)
{
int pivot = (front + end) / 2;
int i = front - 1;
int j = end + 1;
while (i < j)
{
do
i++;
while (list[i] <= list[pivot]);
do
j--;
while (list[j] >= list[pivot]);
swap(list[i], list[j]);
}
swap(list[pivot], list[i]);
return i;
}
/*int Partition(int *list, int front, int end)
{
int i = front - 1;
for (int j = front; j < end; j++)
{
if (list[j] < list[end])
{
swap(list[++i], list[j]);
}
}
swap(list[++i], list[end]);
return i;
}*/
void Quicksort(int *list, int front, int end)
{
if (front < end)
{
int pivot = Partition(list, front, end);
Quicksort(list, front, pivot - 1);
Quicksort(list, pivot + 1, end);
}
}
void Print(int *list)
{
for (int i = 0; i < n; i++)
cout << list[i] << " ";
cout << endl;
}
int main()
{
int a[] = {9, 4, 1, 6, 7, 3, 8, 2, 5};
cout << "Unsorted: \n";
Print(a);
cout << "Sorted: \n";
Quicksort(a, 0, n - 1);
Print(a);
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.136.218 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1618729063.A.8D4.html
推
04/18 15:42,
3年前
, 1F
04/18 15:42, 1F
→
04/18 15:42,
3年前
, 2F
04/18 15:42, 2F
推
04/18 15:47,
3年前
, 3F
04/18 15:47, 3F
→
04/18 15:48,
3年前
, 4F
04/18 15:48, 4F
→
04/18 15:55,
3年前
, 5F
04/18 15:55, 5F
→
04/18 15:56,
3年前
, 6F
04/18 15:56, 6F
推
04/18 15:57,
3年前
, 7F
04/18 15:57, 7F
→
04/18 16:01,
3年前
, 8F
04/18 16:01, 8F
推
04/18 16:01,
3年前
, 9F
04/18 16:01, 9F
→
04/18 16:06,
3年前
, 10F
04/18 16:06, 10F
推
04/18 16:22,
3年前
, 11F
04/18 16:22, 11F
→
04/18 16:22,
3年前
, 12F
04/18 16:22, 12F
→
04/18 16:22,
3年前
, 13F
04/18 16:22, 13F
→
04/18 16:25,
3年前
, 14F
04/18 16:25, 14F
→
04/18 16:25,
3年前
, 15F
04/18 16:25, 15F
推
04/18 17:22,
3年前
, 16F
04/18 17:22, 16F
推
04/18 19:38,
3年前
, 17F
04/18 19:38, 17F
→
04/18 19:38,
3年前
, 18F
04/18 19:38, 18F
推
04/18 19:42,
3年前
, 19F
04/18 19:42, 19F
→
04/18 22:06,
3年前
, 20F
04/18 22:06, 20F
推
04/24 02:42,
3年前
, 21F
04/24 02:42, 21F