排序算法 - 奇偶排序

基本思想

基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序。

举个例子:待排数组[6 2 4 1 5 9]

第一次比较奇数列,奇数列与它的邻居偶数列比较,如6和2比,4和1比,5和9比。

[6 2 4 1 5 9]

交换后变成

[2 6 1 4 5 9]

第二次比较偶数列,即6和1比,5和5比。

[2 6 1 4 5 9]

交换后变成

[2 1 6 4 5 9]

第三趟又是奇数列,选择的是2,6,5分别与它们的邻居列比较。

[2 1 6 4 5 9]

交换后

[1 2 4 6 5 9]

第四趟偶数列。

[1 2 4 6 5 9]

一次交换

[1 2 4 5 6 9]

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package main.java.com.study.sortingAalgorithm;

import main.java.com.study.utils.CommonUtils;

/**
* @author: whb
* @description: 奇偶排序:基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序
*/
public class OddEventSort {

public static void oddEventSort(int[] unsorted) {
int temp;
for (int i = unsorted.length - 1; i > unsorted.length / 2 - 1; i--) {
//奇数排序
for (int j = 1; j <= i; j += 2) {
if (j == unsorted.length - 1) {
break;
}
if (unsorted[j] > unsorted[j + 1]) {
temp = unsorted[j];
unsorted[j] = unsorted[j + 1];
unsorted[j + 1] = temp;
}
}
//偶数排序
for (int j = 0; j <= i; j += 2) {
if (j == unsorted.length - 1) {
break;
}
if (unsorted[j] > unsorted[j + 1]) {
temp = unsorted[j];
unsorted[j] = unsorted[j + 1];
unsorted[j + 1] = temp;
}
}
}
}

public static void main(String[] args) {
int[] unsorted = new int[]{12, 33, 45, 33, 13, 55, 34, 7, 6};
System.out.println("**************奇偶排序******************");
System.out.println("排序前:");
CommonUtils.display(unsorted);
System.out.println("排序后:");
oddEventSort(unsorted);
CommonUtils.display(unsorted);
}
}

测试结果

奇偶排序测试结果

本文标题:排序算法 - 奇偶排序

文章作者:王洪博

发布时间:2018年06月21日 - 00:06

最后更新:2019年09月12日 - 10:09

原始链接:http://whb1990.github.io/posts/185015d0.html

▄︻┻═┳一如果你喜欢这篇文章,请点击下方"打赏"按钮请我喝杯 ☕
0%