三路快排板子

2022-08-31 20:57:12 字數 1142 閱讀 8537

還是覺得別人的快排寫得太醜了

雙路快排

void qsort2(int l, int r) 

/* //隨機取值

int index = rand() % (r - l + 1) + l;

swap(nums[l], nums[index]);*/

int key = nums[l];

int i = l, j = r;

while(i < j)

nums[i] = nums[j];

while(i < j && nums[i] <= key)

nums[j] = nums[i];

}nums[i] = key;

qsort2(l, i - 1);

qsort2(i + 1, r);

}

三路快排

圖示

按i走,小於key的丟到前面去,大於的丟到後面去

void qsort3(int *nums, int l, int r) 

int index = rand() % (r - l + 1) + l;//隨機種子

swap(nums[index], nums[l]);

int key = nums[l];

int lt = l, i = l + 1, j = r;

while(i <= j) else if(nums[i] > key)

while(i <= j && nums[i] == key)

}qsort3(nums, l, lt - 1);

qsort3(nums, j + 1, r);

}int main()

cout << " !! " << endl;

for(int i = 0;i < n;++i)

cout << endl;

qsort3(nums, 0, n - 1);

for(int i = 0;i < n;++i)

cout << " // " << endl;

}return 0;

}

LeetCode 顏色分類(三路快排)

給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...

三路快排 75 顏色分類

給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...

快速排序之三路快排

當大量出現重複值時,我們使用三路快排,如下 arr 表示排序陣列 l 表示陣列左邊界 r 表示陣列右邊界 public static void quicksortinternal3 int arr,int l,int r else if arr i v else 交換l與lt元素,可以確定基準值的位...