Re: [姆咪] 我要吐了 教我寫c

作者: Rushia (みけねこ的鼻屎)   2023-10-28 14:03:18
※ 引述《oin1104 (是oin的說)》之銘言:
: 我要吐了
: 明明我寫的丟去執行都沒問題
: 可是就是時間太久 不接受
: qsort怎麼用阿
: 機掰 我吐了
請用c語言實現快速排序
#include <stdio.h>
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
int partition (int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high- 1; j++) {
if (arr[j] <= pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, n-1);
for(int i=0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
這裡主要邏輯是:
選擇一個基準值pivot,通常選擇數組的最後一個元素
定義兩個指標i和j,i初始化為low-1,j初始化為low。
j從low到high-1遍歷數組,如果arr[j]小於等於pivot,交換arr[++i]和arr[j]的位置,這樣
可以保證左邊的值都小於pivot。
最後交換pivot和arr[i+1]的位置,這樣可以保證pivot的左邊值都小於pivot,右邊值都大
於pivot。
遞歸對pivot左邊和右邊的子數組進行快速排序。
這樣就可以實現快速排序了。
作者: OAOb (dOAO)   2023-10-28 14:04:00
大師
作者: JIWP (JIWP)   2023-10-28 14:05:00
大師
作者: Rushia (みけねこ的鼻屎)   2023-10-28 14:05:00
我請神來的
作者: nothink00 (線蟲)   2023-10-28 14:06:00
大師
作者: NCKUEECS (小惠我婆)   2023-10-28 14:10:00
大師
作者: oin1104 (是oin的說)   2023-10-28 14:25:00
非常感謝

Links booklink

Contact Us: admin [ a t ] ucptt.com