本篇主要講解數(shù)組排序相關(guān)的三種算法,冒泡排序,直接排序和快速排序。
冒泡排序
算法說明
在數(shù)組中依次比較相鄰的兩個元素,當(dāng)滿足左側(cè)大于右側(cè)時(升序排序),則兩個位置的元素互換。如此重復(fù),最終即可完成數(shù)組的排序。
代碼實現(xiàn)
public static void bubbleSort(int[] array){
// 循環(huán)輪數(shù)比數(shù)組大小小1輪
for(int i = 1; i < array.length; i++){
// 循環(huán)1輪后,最大的元素,已經(jīng)排到數(shù)組后面,不用再參與比較
for(int j = 0; j < array.length - i; j++){
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
直接選擇排序
算法說明
依次找出數(shù)組中最小值的索引,并和數(shù)組左側(cè)的元素進行位置交換。
這樣從整體上就是數(shù)組的左側(cè)部分是按照由小到大依次排列的有序數(shù)組。文章來源:http://www.zghlxwxcb.cn/news/detail-733849.html
代碼實現(xiàn)
public static void selectSort(int[] array){
for(int i = 0; i < array.length - 1; i++){
// 記錄比較的元素和索引
int min = array[i];
int minIndex = i;
for(int j = i + 1; j < array.length; j++){
if(array[j] < min){
// 記錄最小值的索引和值
minIndex = j;
min = array[j];
}
}
// 將最小值與前面的元素交換
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
快速排序
算法說明
選擇一個基準(zhǔn)比較值,然后依據(jù)這個基準(zhǔn)值,將數(shù)組分隔為兩個部分,左側(cè)的部分為所有小于基準(zhǔn)的值,右側(cè)部分為所有大于基準(zhǔn)的值。文章來源地址http://www.zghlxwxcb.cn/news/detail-733849.html
代碼實現(xiàn)
/**
* 快速排序法,排序數(shù)組
* @author Ethan
* @description
* @param array
*/
public static void quickSort(int[] array){
subSort(array,0,array.length - 1);
}
/**
* 快速排序法的核心算法
* @author Ethan
* @description
* @param array 被排序的數(shù)組
* @param start 起始索引
* @param end 結(jié)束索引
*/
public static void subSort(int[] array, int start, int end){
if(start < end){
// 選取數(shù)組最左邊的元素作為判斷基礎(chǔ)
int base = array[start];
int left = start;
int right = end + 1;
while(true){
// 從左向右遍歷遇到大于基數(shù)的索引停止,left指向大于基數(shù)的索引
while(left < end && array[++left] <= base)
;
// 從右向左遍歷找到小于基數(shù)的索引停止,right指向小于基數(shù)的索引
while(right > start && array[--right] >= base)
;
// 當(dāng)大于基數(shù)的索引在小于基數(shù)的索引前時,進行交換,讓小于基數(shù)的值都在左邊,大于基數(shù)的值都在右邊
if(left < right) {
swap(array,left,right);
}else{
break;
}
}
// 將基數(shù)和小于基數(shù)的最右邊的元素位置對換
swap(array,start,right);
// 遞歸排序分割后的數(shù)組
subSort(array,start,right-1);
subSort(array,right + 1,end);
}
}
/**
* 交換數(shù)組中兩個索引處的數(shù)值
* @author Ethan
* @description
* @param array
* @param left
* @param right
*/
public static void swap(int[] array, int left, int right){
int temp = array[left];
array[left] = array[right];
array[right] = temp;
}
到了這里,關(guān)于算法__數(shù)組排序_冒泡排序&直接選擇排序&快速排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!