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

你可能感兴趣的:(数据结构与算法)