快速排序(比希爾排序還要快)
阿新 • • 發佈:2021-09-15
程式碼
public static void quickSort(int[] arr,int left,int right){ int l = left; int r = right; //pivot 中軸值 int pivot = arr[(left + right) / 2]; int temp = 0; //while迴圈的目的是讓比pivot值小的放左邊,比pivot值大的放右邊 while(l < r){ //在pivot左邊一直找,找到大於等於pivot值,才退出 while(arr[l] < pivot){ l += 1; } //在pivot右邊一直找,找到大於等於pivot值,才退出 while(arr[r] > pivot){ r -= 1; } //如果l >= r,說明左邊都是<=pivot的值,右邊都是>=pivot的值 if(l >= r){ break; } //交換 temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; //如果交換完後,發現這個arr[l] == pivot,那麼r前移 if(arr[l] == pivot){ r -= 1; } //如果交換完後,發現這個arr[r] == pivot,那麼l後移 if(arr[r] == pivot){ l += 1; } } //不判斷,出現棧溢位 if(l == r){ l += 1; r -= 1; } //向左遞迴 if(left < r){ quickSort(arr, left, r); } //向右遞迴 if(right > l){ quickSort(arr, l, right); } }
效率
//8000 0000 17781ms
//800 0000 1632ms
//80 0000 154ms
//8 0000 27ms