看寫法二吧,寫法一將方法抽離出來,卻降低了效率。
寫法一(經實測,資料量大時,容易會溢位。)
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 那個位置...