Hark的数据结构与算法练习之地精(侏儒)排序

算法说明

地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的。

不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的。而地精排序是上来先从小到大排序,碰到交换到再从大到小,接着再从小到大进行排序。

举个例子:

对8,6,4,5,1进行升序排序

1、8与6交换,结果是

{6,8,4,5,1}

2、8与4交换,结果是

{6,4,8,5,1}

3、4与6交换,结果是

{4,6,8,5,1}

4、5与8交换,结果是

{4,6,5,8,1}

5、6与5交换,结果是

{4,5,6,8,1}

6、8与1交换,结果是

{4,5,6,1,8}

7、6与1交换,结果是

{4,5,1,6,8}

8、5与1交换,结果是

{4,1,5,6,8}

9、4与1交换,结果是

{1,4,5,6,8}

 

代码

使用的是java

package hark.sort.exchangesort;

/*
 * 地精排序(侏儒排序)
 */
public class GnomeSort {
	public static void main(String[] args) {
		int[] arrayData = { 5, 3, 2, 4, 3, 1, 2, 1, 4, 2, 4, 21, 6, 3, 2, 1 };
		GnomeSortMethod(arrayData);
		for (int integer : arrayData) {
			System.out.print(integer);
			System.out.print(" ");
		}
	}

	public static void GnomeSortMethod(int[] arrayData) {
		int index = 0;
		int temp;
		while (index < arrayData.length - 1) {
			if (arrayData[index] <= arrayData[index + 1]) {
				index++;
			} else {
				temp = arrayData[index];
				arrayData[index] = arrayData[index + 1];
				arrayData[index + 1] = temp;

				if (index > 0) {
					index--;
				} else {
					index++;
				}
			}
		}
	}
}

  

 

参考

http://blog.csdn.net/wklken/article/details/7606519

 

posted @ 2015-03-20 16:18  HarkLee  阅读(303)  评论(0编辑  收藏  举报