1. 程式人生 > >數據結構之--冒泡排序算法及改進

數據結構之--冒泡排序算法及改進

star span 雞尾酒排序 排序 style 一個 ray code 同時

冒泡排序,是我們學習數據結構第一個排序算法,也是一種最常見和簡單的排序算法。

排序原理:

我們把一個數組從左到右依次兩兩元素比較,比較完成一趟後,能確定最大(最小)值,放在最右邊(最左邊);

剩下的元素重復上述步驟,直到整個數組有序。

該算法時間復雜度一般為n2

java實現代碼如下:

public class BubbleSort {
    public static void swap(int[] array, int a, int b)
    {
        array[a] = array[a] ^ array[b];
        array[b] = array[b] ^ array[a];
        array[a] 
= array[a] ^ array[b]; } public static void sort1(int[] array, int length) { for(int i = 0; i < length -1; i++) { for (int j = 0; j < length - 1 - i; j++) { if (array[j] > array[j +1]) swap(array, j, j
+1); } } } }

該算法有一種改進算法,叫雞尾酒排序,也叫定向冒泡排序。

我們可以同時遍歷出最大和最小的數,並放在兩邊,後面繼續重復上述步驟,某些情況下(比如數據大部分有序),會比第一種時間復雜度低。

JAVA實現如下:

public class BubbleSort {
    public static void swap(int[] array, int a, int b)
    {
        array[a] = array[a] ^ array[b];
        array[b] 
= array[b] ^ array[a]; array[a] = array[a] ^ array[b]; } public static void sort2(int[] array, int length) { int start = 0; int end = length -1 ; while(start < end) { for(int i = start; i < end; i++) { if (array[i] > array[i +1]) swap(array, i, i+1); } end --;for(int j = end; j > start; j--) { if (array[j] < array[j - 1]) swap(array, j, j-1); } start++; } } }

數據結構之--冒泡排序算法及改進