算法说明
个人感觉是没有意义的算法,只是用来作为学术研究。或者说开拓一下思维。
从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