還是覺得別人的快排寫得太醜了
雙路快排
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元素,可以確定基準值的位...