排序演算法(部分)

2021-09-26 03:55:23 字數 2500 閱讀 3111

快速排序會犧牲陣列中的乙個資料,所以實際的陣列長度,會比真實的資料多一,其中會將下面所說的標誌位賦值給arr[0]。以犧牲陣列中arr[0]為例:

快速排序主要思想:在陣列角標從left到right之間,取左邊第乙個數作為標誌位,將標誌位賦值給arr[0],然後分兩步迴圈判斷(這兩步順序不能混亂)1.從右至左,2.從左至右

1.從右至左:迴圈判斷各個位與標誌位的大小,當標誌位大於當前位時結束迴圈,然後將當前放到陣列的左邊,即當前的left的位置上(arr[left])然後

(第一次迴圈放置在標誌位的位置上,覆蓋了標誌位,但是arr[0]還是標誌位沒有被真正的覆蓋,這樣,在之後的轉移覆蓋的時候,就相當於出現了乙個temp)

2.從左至右:迴圈判斷各個位於標誌位的大小,當標誌位小於當前位時結束迴圈,然後將當前放到陣列的右邊,即當前的right的位置上(arr[right])

1.2.只是執行了一步,即只轉換的了至多兩個數字,所以外層必須再有一層迴圈,最後將arr[0]賦值給left。

再說遞迴問題,,上面說了快排是從left到right之間的問題,最後將標誌位放置在中間的合理位置(即標誌位的左邊小於它,標誌位的右邊大於它)這樣可以將陣列一分為二

分別計算兩邊的陣列,遞迴在這裡很實用,

你要是知道打斷點,然後debug執行就更好了,可以很清楚的看見堆疊的資訊,更方便理解

package day06;

public class ceshi2 ;

for (int i = 1; i < arr.length; i++)

system.out.println();

quick(arr, 1, arr.length - 1);

for (int i = 1; i < arr.length; i++)

}private static void quick(int arr, int left, int right)

}private static int pisiton(int arr, int left, int right)

while (left < right && arr[left] < arr[0]) left++; //從左至右,找到第乙個大於標誌位的數

if (left < right)

}arr[left] = arr[0]; //該次遍歷的arr[left]賦值arr[0],即:最後將標誌位放到合適的位置 左 < 標誌位 《右

return left;}}

偷過來的一張圖(咳咳,才沒有盜,)

}//構造大根堆(通過新插入的數上公升)

public static void heapinsert(int arr) }}

//將剩餘的數構造成大根堆(通過頂端的數下降)

public static void heapify(int arr, int index, int size) else

//比較父結點的值與孩子中較大的值,並確定最大值的索引

if (arr[index] > arr[largestindex])

//如果父結點索引是最大值的索引,那已經是大根堆了,則退出迴圈

if (index == largestindex)

//父結點不是最大值,與孩子中較大的值交換

swap(arr, largestindex, index);

//將索引指向孩子中較大的值的索引

index = largestindex;

//重新計算交換之後的孩子的索引

left = 2 * index + 1;

right = 2 * index + 2;}}

//交換陣列中兩個元素的值

public static void swap(int arr, int i, int j)

面試 演算法部分 氣泡排序

三 四 時間複雜度 第一次排序 6和3比較,6大於3,交換位置 3 6 8 2 9 1 第二次排序 6和8比較,6小於8,不交換位置 3 6 8 2 9 1 第三次排序 8和2比較,8大於2,交換位置 3 6 2 8 9 1 第四次排序 8和9比較,8小於9,不交換位置 3 6 2 8 9 1 第五...

演算法部分整理

1.pca主成分分析 主成分分析 principal component analysis,pca 是一種統計方法。通過正交變換將一組可能存在相關性的變數轉換為一組線性不相關的變數,轉換後的這組變數叫主成分。無監督的學習,往特徵量最大的特徵向量的分銷商投影 pca的主要問題 沒有考慮類別號 進行主成...

《演算法之道》精華 經典演算法部分

折半插入排序 歸併排序 快排 任何基於比較的排序,決策樹高度至少為nlog n 計數排序 基數排序 桶排序 快速次序選擇 求第k大的數 線性最差快速次序選擇 折半搜尋 常數搜尋 雜湊搜尋 乘法雜湊 開放定址雜湊 雜湊碰撞時縱深擴充套件,新增乙個鍊錶 封閉定址雜湊 雜湊碰撞時為元素找到另乙個位置 非線...