以一邊為基數的快速排序法

2021-09-01 13:18:40 字數 708 閱讀 7418

看寫法二吧,寫法一將方法抽離出來,卻降低了效率。

寫法一(經實測,資料量大時,容易會溢位。)

private void quicksort3(int arr, int left, int right) 

arr[index] = arr[right];//將基數所在下標對應的值改為找到的比基數小的值

arr[right] = base;//將找到的比基數小的位置的值改為基數

index = right;//修改基數下標

while(left寫法二

private void quicksort3(int arr, int left, int right)

arr[middle] = arr[right];//將基數所在下標對應的值改為找到的比基數小的值

middle = right;//修改基數所在的下標位置

arr[right] = base;//將找到的比基數小的位置的值改為基數的值

while(leftarr[middle] = arr[left];

middle = left;

arr[left] = base;

}//運用分治法的思想對陣列進行遞迴。

quicksort3(arr, left, middle-1);

quicksort3(arr, middle+1, right);

} }

迭代和遞迴的區別 以快速排序演算法為例

這是一篇講解快速排序演算法的文章 排序演算法有很多種,例如氣泡排序法,堆排序法,簡單排序法以及快速排序法等。其中,快速排序演算法的時間複雜度為o nlogn 氣泡排序演算法的時間複雜度為o n 2 故快速排序演算法比較快,但是其不穩定。穩定性是指 假定在待排序的記錄序列中,存在多個具有相同的關鍵字的...

快速排序是對冒泡法排序的一種改進。

快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以對n個無序數列a 0 a 1 a ...

快速排序法為什麼一定要從右邊開始的原因

這裡兩個while的順序是不能改變的,想一想 假設對如下進行排序 如上圖,6在左,9在右 我們將6作為基數。假設從左邊開始 與正確程式正好相反 while nums i index i j while nums j index j i 按照這個 邏輯,走一遍,i 就會移動到現在的 數字 7 那個位置...