java資料結構 – 簡單排序

來源:互聯網
上載者:User

      資料結構是指資料在電腦儲存空間中(或磁碟中)的安排方式,而演算法就是指軟體程式用來操作這些結構中的資料的過程。

一、冒泡排序

     冒泡排序是所有排序裡最簡單但又是效率最低的排序,例如10個資料項目的排序次數是:10+9+8+7...+1

     N個資料項目,第一趟排序有N-1次比較,第二次N-2次比較,如此類推,排序次數是:(N-1)+(N-2)+(N-3)+...+1 = N*(N-1)/2

public static void bubbleArray(int[] array) {        // 最多做n-1趟排序        for (int i = 0; i < array.length - 1; i++) {            // 對當前數組array[0......length-i-1]進行排序            // j的範圍是在逐步縮小的,因為內部迴圈走過一遍以後,最大或者最小的肯定已經放到了最後面。            for (int j = 0; j < array.length - i - 1; j++) {                if (array[j] > array[j + 1]) {                    int temp = array[j];                    array[j] = array[j + 1];                    array[j + 1] = temp;                }            }            for (int x = 0; x < array.length; x++)                System.out.println(array[x]);            System.out                    .println("--------------------------------------------");        }    }    public static void main(String[] args) {        int[] array = new int[] { 5, 4, 3, 2, 1 };        bubbleArray(array);    }

輸出:

4
3
2
1
5
--------------------------------------------
3
2
1
4
5
--------------------------------------------
2
1
3
4
5
--------------------------------------------
1
2
3
4
5
--------------------------------------------

 

二、選擇排序

      選擇排序開始從左邊第一個元素作為基數開始和右面的進行比較,根據大於或者小於進行比較,當找到了比基數大的最大元素或者比基數小的最小元素的時候,將這兩個元素進行交換,然後再從左邊第二個元素開始,以此迴圈。

      因此,選擇排序和冒泡排序執行了相同次數的比較:N*(N-1)/2

      對於10個資料項目,需要45次比較,但10個資料項目只需要少於10次交換。資料量較大時,選擇排序優於冒泡排序。

public static void selectionArray(int[] array) {        // index用於記錄最小值的下標        int i, j, temp, index, min;        for (i = 0; i < array.length - 1; i++) {            min = array[i];            index = i;            for (j = i + 1; j < array.length; j++) {                if (min > array[j]) {                    min = array[j];                    index = j;                }            }            temp = array[i];            array[i] = array[index];            array[index] = temp;            for (int x = 0; x < array.length; x++)                System.out.println(array[x]);            System.out.println("--------------------------------------------");        }    }    public static void main(String[] args) {        int[] array = new int[] { 5, 1, 4, 3, 2, 6 };        selectionArray(array);    }

min = array[j]; 確保了每一次對比都將最小的元素更新,j的迴圈結束以後,能找到最小的元素的下表,然後再i的迴圈裡進行元素交換。

輸出:

1
5
4
3
2
6
--------------------------------------------
1
2
4
3
5
6
--------------------------------------------
1
2
3
4
5
6
--------------------------------------------
1
2
3
4
5
6
--------------------------------------------
1
2
3
4
5
6
--------------------------------------------

 

三、插入排序

     插入排序是三種基本排序演算法裡最好的一種排序,一般情況下,它比冒泡排序要快一倍,比插入排序還要快一些。

     插入排序就是每一步都將一個待排資料按其大小插入到已經排序的資料中的適當位置,直到全部插入完畢。

   插入排序方法分直接插入排序和折半插入排序兩種,這裡只介紹直接插入排序,

     在第一趟演算法中,最多比較1次,第二趟最多比較2次,以此類推,最後一趟比較最多,N-1次。

     因此有1+2+3+...+(N-1)=N*(N-1)/2次,因為每一趟排序發現插入點之前,平均只有全體資料的一半進行了比較,

     因此比較次數為:N*(N-1)/4 次,

     示範了對4個元素進行直接插入排序的過程,共需要(a),(b),(c)三次插入。

 

public static void insertSort(int[] array) {        for (int i = 1; i < array.length; i++) {            int t = array[i];            int j = i;            //while部分就是在已經排好序的局部元素進行元素互換            while ((j > 0) && (array[j - 1] > t)) {                array[j] = array[j - 1];// 將已排好序的元素往右移                --j;            }            array[j] = t;//將元素插入到已經排好序的局部元素的合適位置                        for (int x = 0; x < array.length; x++)                System.out.println(array[x]);                        System.out.println("===========================");        }    }    public static void main(String[] args) {        int[] array = {5, 1, 4, 2, 3};        insertSort(array);            }

輸出:

1
2
4
5
9
23
27
45

插入排序部分引用了:http://www.cnblogs.com/kkun/archive/2011/11/23/2260265.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.