奇偶排序

奇偶排序法的思路是在數組中重複兩趟掃描。第一趟掃描選擇所有的數據項對,a[j]和a[j+1],j是奇數(j=1, 3, 5……)。如果它們的關鍵字的值次序顛倒,就交換它們。第二趟掃描對所有的偶數數據項進行同樣的操作(j=2, 4,6……)。重複進行這樣兩趟的排序直到數組全部有序。

基本介紹

詳細說明
和冒泡排序法一樣,奇偶排序的時間複雜度為O(N^2)。
Java數據結構和算法》中寫道:
奇偶排序實際上在多處理器環境中很有用,處理器可以分別同時處理每一個奇數對,然後又同時處理偶數對。因為奇數對是彼此獨立的,每一刻都可以用不同的處理器比較和交換。這樣可以非常快速地排序。
Java代碼
1 public void oddEvenSort(int[] array){
2 for (int i = 0; i < array.length; i += 2){
3 int j = 0;
4 scan(array, j);
5 j = 1;
6 scan(array, j);
7 }
8 }
9
10 private void scan(int[] array, int j) {
11 while (j < array.length - 1){
12 if (array[j] > array[j + 1]){
13 swap(array, j, j + 1);
14 }
15 j += 2;
16 }
17 }
18
19 private static void swap(int[] array, int index1, int index2) {
20 int temp = array[index1];
21 array[index1] = array[index2];
22 array[index2] = temp;
23 }
後來有朋友提出建議,我小小的改動了一下,對隨機數組排序的效率略有提高:
Java代碼
24 public static void oddEvenSort(int[] array) {
25 boolean unsorted = true;
26 while (unsorted) {
27 unsorted = false;
28 int i = 1;
29 boolean oddUnsorted = scan(array, i);
30 i = 0;
31 boolean evenUnsorted = scan(array, i);
32 unsorted = oddUnsorted || evenUnsorted;
33 }
34 }
35
36 private static boolean scan(int[] array, int i) {
37 boolean unsorted = false;
38 while (i < array.length - 1) {
39 if (array[i] > array[i + 1]) {
40 swap(array, i, i + 1);
41 unsorted = true;
42 }
43 i += 2;
44 }
45 return unsorted;
46 }
47
48 private static void swap(int[] array, int index1, int index2) {
49 int temp = array[index1];
50 array[index1] = array[index2];
51 array[index2] = temp;
52 }

相關詞條

熱門詞條

聯絡我們