Data_Structure/作業/unit13/quicksort_v2.cpp
2025-01-20 21:30:53 +08:00

69 lines
1.8 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* file name: quickSort.c */
/* 快速排序 - 由大到小 */
#include <stdio.h>
void quickSort(int[], int, int, int);
void printDashLine(void);
int main()
{
int data[20];
int size = 0, i;
printf("\n請輸入資料(輸入 0 表示結束): ");
/* 要求輸入數字直到輸入數字為 0 */
do {
scanf("%d", &data[size]);
} while(data[size++] != 0);
printDashLine();
quickSort(data, 0, size-2, size);
printDashLine();
printf("由大至小排序後的資料: "); // 修改提示文字
for (i = 0; i < size-1; i++)
printf("%d ", data[i]);
printf("\n");
return 0;
}
void quickSort(int data[], int left, int right, int size)
{
/* left 與 right 分別表欲排序資料兩端 */
int lbase, rbase, temp, i;
if (left < right) {
lbase = left+1;
while(data[lbase] > data[left]) // 修改比較符號
lbase++;
rbase = right;
while(data[rbase] < data[left]) // 修改比較符號
rbase--;
/* 若lbase小於rbase則兩資料對調 */
while (lbase < rbase) {
temp = data[lbase];
data[lbase] = data[rbase];
data[rbase] = temp;
lbase++;
while(data[lbase] > data[left]) // 修改比較符號
lbase++;
rbase--;
while (data[rbase] < data[left]) // 修改比較符號
rbase--;
}
/* 此時lbase大於rbase則rbase的資料與第一筆對調 */
temp = data[left];
data[left] = data[rbase];
data[rbase] = temp;
printf("排序過程: ");
for (i = 0; i < size-1; i++)
printf("%3d ", data[i]);
printf("\n");
quickSort(data, left, rbase-1, size);
quickSort(data, rbase+1, right, size);
}
}
void printDashLine()
{
for(int i = 0; i < 62; i++)
printf("-");
printf("\n");
}