Hark的数据结构与算法练习之臭皮匠排序

算法说明

个人感觉是没有意义的算法,只是用来作为学术研究。或者说开拓一下思维。

从wikipedia copy来的一句解释的话:Stooge排序是一种低效的递归排序算法,甚至慢于冒泡排序。在《算法导论》第二版第7章(快速排序)的思考题中被提到,是由Howard、Fine等教授提出的所谓“漂亮的”排序算法。

实现逻辑:

同样也是从wikipedia copy来的

1、如果最后一个值小于第一个值,则交换这两个数
2、如果当前集合元素数量大于等于3:
3、使用臭皮匠排序前2/3的元素
4、使用臭皮匠排序后2/3的元素
5、再次使用臭皮匠排序前2/3的元素

代码

使用的是java

package hark.sort.exchangesort;

/*
 * 臭皮匠排序
 */
public class StoogeSort {
	public static void main(String[] args) {
		int[] arrayData = { 2, 3, 4, 5, 6, 7, 8, 9, 1 };
		StoogeSortMethod(arrayData, 0, arrayData.length - 1);
		for (int integer : arrayData) {
			System.out.print(integer);
			System.out.print(" ");
		}
	}

	public static void StoogeSortMethod(int[] arrayData, int beginIndex,
			int endIndex) {
		if (endIndex - beginIndex + 1 >= 3) {
			int t = (endIndex - beginIndex + 1) / 3;
			StoogeSortMethod(arrayData, beginIndex, endIndex - t);
			StoogeSortMethod(arrayData, beginIndex + t, endIndex);
			StoogeSortMethod(arrayData, beginIndex, endIndex - t);

		} else if (arrayData[beginIndex] > arrayData[endIndex]) {
			arrayData[beginIndex] = arrayData[beginIndex] + arrayData[endIndex];
			arrayData[endIndex] = arrayData[beginIndex] - arrayData[endIndex];
			arrayData[beginIndex] = arrayData[beginIndex] - arrayData[endIndex];
		}
	}
}

  

参考

http://www.cnblogs.com/zmjarek/p/3712041.html

http://zh.wikipedia.org/wiki/%E8%87%AD%E7%9A%AE%E5%8C%A0%E6%8E%92%E5%BA%8F

原文地址:https://www.cnblogs.com/hark0623/p/4353585.html