1.基本概念
根據在排序過程中待排序的記錄是否全部被放置在內存中,將排序分爲內部排序和外部排序。內部排序是在排序整個過程中,待排序的所有記錄全部 放置在內存中;外排序是由於排序的記錄個數太多,不能同時放置在內存中,整個排序過程需要 在內外存之間多次交換數據才能進行。
2.八大排序
下面講述的八大排序,都是屬於內部排序。具體如下圖
3.冒泡排序
首先來講講冒泡排序(Bubble Sort),這是思路最簡單的排序方式。他的基本思想是:重複地走訪要排序的數列,一次比較2相鄰的元素,如果它們的順序錯誤就把它們交換過來,直到沒有再需要交換的,這樣越大的元素經由交換會慢慢“浮出”。(這裏的排序一般都是從小到大的進行排序)
初: 49 38 65 97 76 13 27 49
1st: 38 49 65 76 13 27 49 97
2nd: 38 49 65 13 27 49 76 97
3rd: 38 49 13 27 49 65 76 97
4th: 38 13 27 49 49 65 76 97
5th: 13 27 38 49 49 65 76 97
每走訪一次數列,都會有一個相對最大的元素浮出。
4.時間複雜度
(1)最好的情況,即待排序的數列初狀態爲正序,則一起泡就可以完成排序,則進行了n-1次比較,沒有數據交換,時間複雜度爲O(n)
(2)最壞的情況,即待排序的數列初狀態爲逆序,此時需要比較n(n-1)/2次,並做等數量的數據交換,因此總的之間複雜度爲O(n^2)。
冒泡排序是一種穩定的排序方法。
5.java代碼的實現
public class bubble {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] a = {57,68,59,52,72,28,96,33,24,19};
//int []a = {57,68,59,52};
System.out.println("冒泡排序的結果是: ");
bubbleSort(a);
printscreen(a);
}
private static void printscreen(int[] number) {
// TODO Auto-generated method stub
int size = number.length;
for (int i = 0 ; i < size;i++)
System.out.print(number[i]+ " ");
System.out.println();
}
//冒泡排序
/**
*
* @author Administrator
*冒泡排序
*比較相鄰的元素,如果第一個比第二個大,就交換他們兩個
*對每一對相鄰的元素做相同的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的
*針對素有的元素重複以上步驟,除了最後一個
*持續每次對越來越少的元素重複上面的操作,直到沒有一個數字需要比較
*/
public static void bubbleSort(int [] number)
{ //nuberm.lengthnuberm.length放在外面,較少調用函數的次數,提高效率?
int size = number.length;
for(int i = 0;i < size -1;i++ )//每次比較最大的到了最後,下一次不用再參與比較
{
for(int j = 0;j < size - 1 - i;j++)//下面有j+1,所以上限要-1
{
if (number[j] > number[j+1])
{
int n = number[j];
number[j] = number[j+1];
number[j+1] = n;
}
}
}
}
}