死磕演算法之快速排序

2021-09-19 22:04:20 字數 769 閱讀 1907

快速排序是乙個運用了分治法和遞迴演算法的排序方式。

假如我們現在要排序的陣列為[3,1,0,2,8,4,2]。那麼在進行快速排序的時候我們先要進行一些準備:

下面開始排序:

先從陣列右邊開始,我們發現j指向的元素2比標桿n小,那麼我們將j指向的元素賦值給i指向的元素,停止操作。此時陣列為[2,1,0,2,8,4,2],i指向第乙個位置,j仍指向最後乙個。

從陣列左邊開始,i指向的元素2比標桿小,所以不做操作,使i++,i指向的元素1比標桿小,所以不做操作,使i++,一直到i指向8的時候比標桿大(注意此處如果等於的話也要操作),那麼就把i指向的元素賦值給j指向的元素,此時陣列為[2,1,0,2,8,4,8],i指向第五個位置。也就是元素8,j仍然指向最後乙個位置。

繼續從右邊操作,j指向的8不比n小,所以不做操作,j--,4不比3小,不做操作,j--。現在i和j的位置重合了,把n放到這個位置上。我們此輪的操作也就結束了,接下來我們把3所在的位置左邊分為乙個陣列,右邊位置分為乙個陣列再次進行剛才的操作。(此處就是乙個遞迴呼叫了)

接下來就來看乙個描述的過程

接下來上**

public static void quicksort(int a, int l, int r) 

j--;

}while(i < j )

i++;}}

a[i] = n;

quicksort(a, l, i-1); /* 遞迴呼叫 */

quicksort(a, i+1, r); /* 遞迴呼叫 */}}

死磕演算法之選擇排序

假如我們現在要排序的陣列為 3,1,0,2,8,4,2 那麼選擇排序的排序流程為 在這個陣列中找出最小值與第乙個元素交換,現在陣列為 0,1,3,2,8,4,2 在這個陣列中除了第乙個位置的元素外找出最小值與第二個元素交換,因為第二個元素就是最小的所以此次沒有發生變化。現在陣列為 0,1,3,2,8...

死磕演算法之堆排序

堆排序主要是運用了二叉樹的性質來進行的排序。在進行堆排序之前我們先了解一下二叉樹的幾個性質 1.在排序使用二叉樹的時候我們要排序的陣列的第0個位置其實是不可以用的,這個時候如果我們要排序的陣列為 3,1,0,2,8,4,2 時,我們首先要把它變為 0,3,1,0,2,8,4,2 我們把他轉換為二叉樹...

死磕演算法之插入排序

相信大家都有打撲克的經歷,那麼我們今天的插入排序就以拿牌為例開始講 注意只是舉例,不是按打牌的規則哦 1.我們拿到了一張牌3,我們把它放手裡,現在手裡有牌 3 2.我們拿到了一張牌1,拿它與手裡最後一張牌也就是3比較,發現1比3小,所以我們把它插入到3的前面,現在手裡有牌 1,3 3.我們拿到了一張...