數據結構之--冒泡排序算法及改進
阿新 • • 發佈:2017-08-12
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++; } } }
數據結構之--冒泡排序算法及改進