李振良Kubernetes/K8s運維架構師實戰(zhàn)(中高級)
C語言實現(xiàn):
void algorithm(int *array, int left, int right){
? ?
? ?if (left >= right) {/*如果左邊索引大于或者等于右邊的索引就代表已經整理完成一個組了*/
? ? ? ?return ;
? ?}
? ?
? ?int i = left;
? ?int j = right;
? ?int key = array[left];
? ?
? ?while (i < j) { /*控制在當組內尋找一遍*/
? ? ? ?
? ? ? ?while (i < j && array[j] >= key) {/*而尋找結束的條件就是,1,找到一個小于或者大于key的數(大于或小于取決于你想升
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 序還是降序)2,沒有符合條件1的,并且i與j的大小沒有反轉*/
? ? ? ? ? ?j --;
? ? ? ?}
? ? ? ?array[i] = array[j];/*找到一個這樣的數后就把它賦給前面的被拿走的i的值(如果第一次循環(huán)且key是
? ? ? ? ? ? ? ? ? ? ? ? ? ? a[left],那么就是給key)*/
? ? ? ?
? ? ? ?while (i < j && array[i] <= key) {/*這是i在當組內向前尋找,同上,不過注意與key的大小關系停止循環(huán)和上面相反,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 因為排序思想是把數往兩邊扔,所以左右兩邊的數大小與key的關系相反*/
? ? ? ? ? ?i ++;
? ? ? ?}
? ? ? ?
? ? ? ?array[j] = array[i];
? ? ? ?
? ?}
? ?
? ?array[i] = key;/*當在當組內找完一遍以后就把中間數key回歸*/
? ?//遞歸
? ?algorithm(array, left, i - 1);/*最后用同樣的方式對分出來的左邊的小組進行同上的做法*/
? ?algorithm(array, i + 1, right);/*用同樣的方式對分出來的右邊的小組進行同上的做法*/
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*當然最后可能會出現(xiàn)很多分左右,直到每一組的i = j 為止*/}