演算法的過程描述如下:
arr[
0~n-
1]範圍上,找到最小值所在的位置,然後把最小值交換到0位置。
arr[
1~n-
1]範圍上,找到最小值所在的位置,然後把最小值交換到1位置。
arr[
2~n-
1]範圍上,找到最小值所在的位置,然後把最小值交換到2位置。
…arr[n-
1~n-
1]範圍上,找到最小值位置,然後把最小值交換到n-
1位置。
選擇排序核心**如下
/**
* 選擇排序
** @param arr
*/public
static
void
selectsort
(int
arr)
for(
int i =
0; i < arr.length; i++)}
//進行交換
swap
(arr, i, minindex);}
}
那麼我們怎麼知道自己寫的**對不對呢?這裡牽扯出乙個概念就是對數器。
對數器簡單的理解就是:保證有乙個100%是對的驗證**,然後通過樣本量比較我們寫的演算法計算出來的結果和我們100%是對的驗證**計算出來的結果做比較。
這麼說可能不好理解,直接上**
public
static
void
main
(string[
] args)}}
}
其他**
/**
* 生成隨機數值
** @param maxsize
* @param maxvalue
* @return
*/public
static
int[
]generaterandomarray
(int maxsize,
int maxvalue)
return arr;
}
從測試結果可以看出,我們的演算法是對的
排序對數器
其實可以不用sort檢驗,排序的特點就是前乙個數比後乙個小 或大 嘛,不過完全無所謂,用這個現成的就行。include include include include include includeusing namespace std define testtime 5000 測試輪數 defin...
選擇排序(選擇排序和堆排序)
選擇排序 從序列中依次選出最小值 或者最大值 放在一側。這樣的排序叫選擇排序。這裡我們對選擇排序進行優化,一次就選出當前序列的最大值和最小值。分別放在最右端和最左端。然後left right 使得序列範圍縮小,再進行選擇最大和最小值。void selectsort int a,int n 3選擇排序...
選擇排序 選擇排序和堆排序
選擇排序 基本思想 每一趟 第i趟,i 0,1,n 2 在後面n i個待排序的資料元素集合中選出關鍵碼最小的資料元素,作為有序元素序列的第i個元素。待到第n 2趟做完,待排序元素集合中只剩下1 個元素,排序結束。一 選擇排序 每一次在一組數中選最大的放到最後,然後再在剩餘的數中選次大的數放到倒數第二...