在學習算法的過程中,我們難免會接觸很多和排序相關的算法。總而言之,對于任何程式設計人員來說,基本的排序算法是必須要掌握的。
從今天開始,我們将要進行基本的排序算法的講解。Are you ready?Let‘s go~~~
1、排序算法的基本概念的講解
時間複雜度:需要排序的的關鍵字的比較次數和相應的移動的次數。
空間複雜度:分析需要多少輔助的記憶體。
穩定性:如果記錄兩個關鍵字的A和B它們的值相等,經過排序後它們的位置沒有發生交換,那麼我們稱這個排序算法是穩定的。
否則我們稱這個排序算法是不穩定的。
排序算法的常見分類:
1、内部排序(最常見的一種排序方式,不需要借助第三方輔助存儲工具)
2、外部排序(需要借助外部存儲來輔助完成相關的排序操作)
如果參與排序的資料元素非常的多,資料量非常的大,計算機無法把整個排序過程放到記憶體中進行的話,
我們必須借助外部存儲器如磁盤來完成,這種排序方式,我們稱之為外部排序。
其中外部排序最常見的就是多路歸并排序,即将原始檔案分解成多個能夠一次性裝入記憶體的部分,分别把每一部分調入
記憶體完成相應的排序,接下來在對多個有序的外部檔案進行多路歸并排序。
對于我們絕大多數的程式員而言,我們經常遇到的為内部排序。接下來我們将要對常見的内部排序進行相應的講解。
今天要講解的内部排序為:
冒泡排序
1、冒泡排序的基本概念的講解
冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序算法。
它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,
也就是說該數列已經排序完成。
這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端,故名冒泡排序。
冒泡排序算法的運作如下:(從後往前)
- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
- 針對所有的元素重複以上的步驟,除了最後一個。
- 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。[
2、Java代碼實作冒泡排序
package com.yonyou.test;
/**
* 内部排序算法之冒泡排序
* 預設按照從小到大進行排序操作
* @author 小浩
* @建立日期 2015-3-24
*/
public class Test{
public static void main(String[] args) {
//需要進行排序的數組
int[] array=new int[]{8,3,2,1,7,4,6,5};
//輸出原數組的内容
printResult(array);
//進行冒泡排序操作
for(int i=0;i<array.length-1;i++)
{
for(int j=0;j<array.length-1-i;j++)
{
if(array[j]>array[j+1])
{
swap(array,j,j+1);
}
}
}
//輸出排序後的相關結果
printResult(array);
}
/**
* 輸出相應數組的結果
* @param array
*/
private static void printResult(int[] array) {
for(int value:array)
System.out.print(" "+value+" ");
System.out.println();
}
/**
* 交換數組中兩個變量的值
* @param array
* @param i
* @param j
*/
private static void swap(int[] array,int i,int j){
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}