/**
* 數(shù)組中兩個(gè)位置交換的算法
* @param array 數(shù)組
* @param i 位置
* @param j 位置
*/
static void change(int[] array, int i, int j) {
if (i == j) return;
array[i] = array[i] + array[j];
array[j] = array[i] - array[j];
array[i] = array[i] - array[j];
}
冒泡排序
第一步把最大的元素放到末尾
第二步把次大元素放到倒數(shù)第二位
/*
* 冒泡排序
* 比較相鄰的元素咸这。如果第一個(gè)比第二個(gè)大蓝角,就交換他們兩個(gè)大州。
* 對(duì)每一對(duì)相鄰元素作同樣的工作言秸,從開始第一對(duì)到結(jié)尾的最后一對(duì)葛碧。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)双揪。
* 針對(duì)所有的元素重復(fù)以上的步驟木蹬,除了最后一個(gè)。
* 持續(xù)每次對(duì)越來越少的元素重復(fù)上面的步驟亲怠,直到?jīng)]有任何一對(duì)數(shù)字需要比較所计。
* @param numbers 需要排序的整型數(shù)組
*/
static void bubbleSort(int[] array) {
int length = array.length;
// for1記錄循環(huán)次數(shù)
for (int i=0;i<length-1;i++) {
// for2正序遍歷并比較相鄰元素,
// 找到最大元素移動(dòng)到最后面
for (int j=0;j<length-1-i;j++) {
if (array[j]>array[j+1]) {
change(array, j, j+1);
}
}
}
}
選擇排序
第一步從未排序的數(shù)組中找到最小元素放到index=0的位置
第二步從未排序的數(shù)組中找到最小元素放到index=1的位置
/**
* 選擇排序算法
* 在未排序序列中找到最小元素团秽,存放到index=0的位置
* 再從剩余未排序元素中繼續(xù)尋找最小元素主胧,存放到index=1的位置。
* 以此類推习勤,直到所有元素均排序完畢踪栋。
*/
static void selectSort(int[] array) {
int length = array.length;
// 外層控制循環(huán)次數(shù)
for (int i=0;i<length;i++) {
// 待確定的位置
int index = i;
// 內(nèi)層for倒序遍歷數(shù)組并與待確定位置的數(shù)比較,
// 若元素小于待確定位置的數(shù)則交換图毕。
for (int j=length-1;j>i;j--) {
if (array[j]<array[index]) {
index = j;
}
}
change(array, index, i);
}
}
冒泡排序和選擇排序的區(qū)別:冒泡排序的思想為:每一次排序過程夷都,通過相鄰元素的交換,將當(dāng)前沒有排好序中的最大(杏璨)移到數(shù)組的最右(左)端囤官。選擇排序是每一次排序過程,我們獲取當(dāng)前沒有排好序中的最大(懈蚺啊)的元素和數(shù)組最右(左)端的元素交換党饮,循環(huán)這個(gè)過程即可實(shí)現(xiàn)對(duì)整個(gè)數(shù)組排序。