排序算法 - 地精排序

基本思想

号称最简单的排序算法,只有一层循环,默认情况下前进冒泡,一旦遇到冒泡的情况发生就往回冒,直到把这个数字放好为止。

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

先设计一个标识i=0然后从头开始判断,什么时候(i < 6)不成立,什么时候排序结束。

[6 2 4 1 5 9]

[0 1 2 3 4 5]

下具体的排序过程如下:

[ i = 0 ]时啥也不干,先让i自增1,达到值为1才开始真正的比较。

交换前[6 2 4 1 5 9][ i = 0]

交换后[6 2 4 1 5 9][ i = 1]

[ i = 1 ]比较6和2,发生交换,只要发生交换i就减1。

交换前[6 2 4 1 5 9][ i = 1]

交换后[2 6 4 1 5 9][ i = 0]

[ i = 0 ]又成0了,啥也不干,自增变成1再说。

交换前[2 6 4 1 5 9][ i = 0]

交换后[2 6 4 1 5 9][ i = 1]

[ i = 1 ]再比较2和6,不交换,只要不交换就自增1。

交换前[2 6 4 1 5 9][ i = 1]

交换后[2 6 4 1 5 9][ i = 2]

[ i = 2 ]比较6和4,发生交换,只要交换就减1。

交换前[2 6 4 1 5 9][ i = 2]

交换后[2 4 6 1 5 9][ i = 1]

[ i = 1 ]比较2和4,不交换,只要不交换就自增1。

交换前[2 4 6 1 5 9][ i = 1]

交换后[2 4 6 1 5 9][ i = 2]

[ i = 2 ]比较4和6,不交换,只要不交换就自增1。

交换前[2 4 6 1 5 9][ i = 2]

交换后[2 4 6 1 5 9][ i = 3]

[ i = 3 ]比较6和1,交换,只要交换就减1。

交换前[2 4 6 1 5 9][ i = 3]

交换后[2 4 1 6 5 9][ i = 2]

[ i = 2 ]比较4和1,交换,只要交换就减1。

交换前[2 4 1 6 5 9][ i = 2]

交换后[2 1 4 6 5 9][ i = 1]

[ i = 1 ]比较2和1,交换,只要交换就减1。

交换前[2 1 4 6 5 9][ i = 1]

交换后[1 2 4 6 5 9][ i = 0]

[ i = 0 ]时啥也不干,先让i自增1,达到值为1才开始真正的比较。

交换前[1 2 4 6 5 9][ i = 0]

交换后[1 2 4 6 5 9][ i = 1]

[ i = 1]比较1和2,不交换,只要不交换就自增1。

[ i = 2]比较2和4,不交换,只要不交换就自增1。

[ i = 3]比较4和6,不交换,只要不交换就自增1。

[ i = 4]比较6和5,交换,只要交换就减1。

交换前[1 2 4 6 5 9][ i = 4]

交换后[1 2 4 5 6 9][ i = 3]

[ i = 3]比较4和5,不交换,只要不交换就自增1。

[ i = 4]比较5和6,不交换,只要不交换就自增1。

[ i = 5]比较6和9,不交换,只要不交换就自增1。

[ i = 6]表达式(i < n)不成立,排序结束。

顺序输出结果即可:[ 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
package main.java.com.study.sortingAalgorithm;

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

/**
* @author: whb
* @description: 地精排序:号称最简单的排序算法,只有一层循环,默认情况下前进冒泡,一旦遇到冒泡的情况发生就往回冒,直到把这个数字放好为止。
*/
public class GnomeSort {

public static void gnomeSort(int[] unsorted) {
int i = 0;
while (i < unsorted.length) {
if (i == 0 || unsorted[i - 1] <= unsorted[i]) {
i++;
} else {
int temp = unsorted[i];
unsorted[i] = unsorted[i - 1];
unsorted[i - 1] = temp;
i--;
}
}
}

public static void main(String[] args) {
int[] unsorted = {6, 2, 4, 1, 5, 9};
System.out.println("**************地精排序******************");
System.out.println("排序前:");
CommonUtils.display(unsorted);
System.out.println("排序后:");
gnomeSort(unsorted);
CommonUtils.display(unsorted);
}
}

测试结果

地精排序测试结果

本文标题:排序算法 - 地精排序

文章作者:王洪博

发布时间:2018年06月30日 - 23:06

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

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

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