1.冒泡排序
冒泡排序是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來(lái)是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
/**
* 冒泡排序
* 比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
* 對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。
* 針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
* 持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
* @param numbers 需要排序的整型數(shù)組
*/
public static void bubbleSort(int[] numbers)
{
int temp = 0;
int size = numbers.length;
for(int i = 0 ; i < size-1; i ++)
{
for(int j = 0 ;j < size-1-i ; j++)
{
if(numbers[j] > numbers[j+1]) //交換兩數(shù)位置
{
temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
}
}
}
}
2.快速排序
3.選擇排序
在要排序的一組數(shù)中,選出最小的一個(gè)數(shù)與第一個(gè)位置的數(shù)交換;然后在剩下的數(shù)當(dāng)中再找最小的與第二個(gè)位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個(gè)數(shù)和最后一個(gè)數(shù)比較為止。
/**
* 選擇排序算法
* 在未排序序列中找到最小元素,存放到排序序列的起始位置
* 再?gòu)氖S辔磁判蛟刂欣^續(xù)尋找最小元素,然后放到排序序列末尾。
* 以此類(lèi)推,直到所有元素均排序完畢。
* @param numbers
*/
public static void selectSort(int[] numbers)
{
int size = numbers.length; //數(shù)組長(zhǎng)度
int temp = 0 ; //中間變量
for(int i = 0 ; i < size ; i++)
{
int k = i; //待確定的位置
//選擇出應(yīng)該在第i個(gè)位置的數(shù)
for(int j = size -1 ; j > i ; j--)
{
if(numbers[j] < numbers[k])
{
k = j;
}
}
//交換兩個(gè)數(shù)
temp = numbers[i];
numbers[i] = numbers[k];
numbers[k] = temp;
}
}
4.插入排序
每步將一個(gè)待排序的記錄,按其順序碼大小插入到前面已經(jīng)排序的字序列的合適位置(從后向前找到合適位置后),直到全部插入排序完為止。
/**
* 插入排序
*
* 從第一個(gè)元素開(kāi)始,該元素可以認(rèn)為已經(jīng)被排序
* 取出下一個(gè)元素,在已經(jīng)排序的元素序列中從后向前掃描
* 如果該元素(已排序)大于新元素,將該元素移到下一位置
* 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置
* 將新元素插入到該位置中
* 重復(fù)步驟2
* @param numbers 待排序數(shù)組
*/
public static void insertSort(int[] numbers)
{
int size = numbers.length;
int temp = 0 ;
int j = 0;
for(int i = 0 ; i < size ; i++)
{
temp = numbers[i];
//假如temp比前面的值小,則將前面的值后移
for(j = i ; j > 0 && temp < numbers[j-1] ; j --)
{
numbers[j] = numbers[j-1];
}
numbers[j] = temp;
}
}
5.希爾排序
6.歸并排序
7.堆排序
8.分配排序(基數(shù)排序)
1)插入排序(直接插入排序、希爾排序)
2)交換排序(冒泡排序、快速排序)
3)選擇排序(直接選擇排序、堆排序)
4)歸并排序
5)分配排序(基數(shù)排序)
所需輔助空間最多:歸并排序
所需輔助空間最少:堆排序
平均速度最快:快速排序
不穩(wěn)定:快速排序,希爾排序,堆排序。

排序復(fù)雜度比較