假如我們現在要排序的陣列為[3,1,0,2,8,4,2]。那麼選擇排序的排序流程為:
在這個陣列中找出最小值與第乙個元素交換,現在陣列為[0,1,3,2,8,4,2]
在這個陣列中除了第乙個位置的元素外找出最小值與第二個元素交換,因為第二個元素就是最小的所以此次沒有發生變化。現在陣列為[0,1,3,2,8,4,2]
在這個陣列中除了第乙個、第二個位置的元素外找出最小值與第三個元素交換,現在陣列為[0,1,2,3,8,4,2]
在這個陣列中除了第乙個、第二個、第三個位置的元素外找出最小值與第四個元素交換,現在陣列為[0,1,2,2,8,4,3]
在這個陣列中除了第乙個、第二個、第三個、第四個位置的元素外找出最小值與第五個元素交換,現在陣列為[0,1,2,2,3,4,8]
在這個陣列中除了第乙個、第二個、第三個、第四個、第五個位置的元素外找出最小值與第六個個元素交換,因為第六個元素就是最小的所以此次沒有發生變化。現在陣列為[0,1,2,2,3,4,8]
現在整個陣列是不是已經變得有序了呢。接下來我們看**版本
接下來上**
int i; // 有序區的末尾位置假如我們現在要排序的陣列為[3,1,0,2,8,4,2]。那麼選擇排序的排序流程為:int j; // 無序區的起始位置
intmin; // 無序區中最小元素位置
int a=new
int;
for(i=0,n=a.length; imin=i;
// 找出"a[i+1] ... a[n]"之間的最小元素,並賦值給min。
for(j=i+1; jif(a[j] < a[min])
min=j;
}// 若min!=i,則交換 a[i] 和 a[min]。
// 交換之後,保證了a[0] ... a[i] 之間的元素是有序的。
if(min != i)
}
在這個陣列中找出最小值與第乙個元素交換,現在陣列為[0,1,3,2,8,4,2]
在這個陣列中除了第乙個位置的元素外找出最小值與第二個元素交換,因為第二個元素就是最小的所以此次沒有發生變化。現在陣列為[0,1,3,2,8,4,2]
在這個陣列中除了第乙個、第二個位置的元素外找出最小值與第三個元素交換,現在陣列為[0,1,2,3,8,4,2]
在這個陣列中除了第乙個、第二個、第三個位置的元素外找出最小值與第四個元素交換,現在陣列為[0,1,2,2,8,4,3]
在這個陣列中除了第乙個、第二個、第三個、第四個位置的元素外找出最小值與第五個元素交換,現在陣列為[0,1,2,2,3,4,8]
在這個陣列中除了第乙個、第二個、第三個、第四個、第五個位置的元素外找出最小值與第六個個元素交換,因為第六個元素就是最小的所以此次沒有發生變化。現在陣列為[0,1,2,2,3,4,8]
現在整個陣列是不是已經變得有序了呢。接下來我們看**版本
接下來上**
int i; // 有序區的末尾位置int j; // 無序區的起始位置
intmin; // 無序區中最小元素位置
int a=new
int;
for(i=0,n=a.length; imin=i;
// 找出"a[i+1] ... a[n]"之間的最小元素,並賦值給min。
for(j=i+1; jif(a[j] < a[min])
min=j;
}// 若min!=i,則交換 a[i] 和 a[min]。
// 交換之後,保證了a[0] ... a[i] 之間的元素是有序的。
if(min != i)
}
死磕演算法之堆排序
堆排序主要是運用了二叉樹的性質來進行的排序。在進行堆排序之前我們先了解一下二叉樹的幾個性質 1.在排序使用二叉樹的時候我們要排序的陣列的第0個位置其實是不可以用的,這個時候如果我們要排序的陣列為 3,1,0,2,8,4,2 時,我們首先要把它變為 0,3,1,0,2,8,4,2 我們把他轉換為二叉樹...
死磕演算法之快速排序
快速排序是乙個運用了分治法和遞迴演算法的排序方式。假如我們現在要排序的陣列為 3,1,0,2,8,4,2 那麼在進行快速排序的時候我們先要進行一些準備 下面開始排序 先從陣列右邊開始,我們發現j指向的元素2比標桿n小,那麼我們將j指向的元素賦值給i指向的元素,停止操作。此時陣列為 2,1,0,2,8...
死磕演算法之插入排序
相信大家都有打撲克的經歷,那麼我們今天的插入排序就以拿牌為例開始講 注意只是舉例,不是按打牌的規則哦 1.我們拿到了一張牌3,我們把它放手裡,現在手裡有牌 3 2.我們拿到了一張牌1,拿它與手裡最後一張牌也就是3比較,發現1比3小,所以我們把它插入到3的前面,現在手裡有牌 1,3 3.我們拿到了一張...