臭皮匠排序

臭皮匠排序

臭皮匠排序(英語:Stooge Sort)是一種低效的遞歸排序算法,甚至慢於冒泡排序。在《算法導論》第二版第7章(快速排序)的思考題中被提到,是由Howard、Fine等教授提出的所謂“漂亮的”排序算法。

基本介紹

  • 中文名:臭皮匠排序
  • 外文名:Stooge Sort
  • 學科:計算機科學
詳解,時間複雜度:,實現,

詳解

臭皮匠排序(英語:Stooge Sort)是一種低效的遞歸排序算法,甚至慢於冒泡排序。在《算法導論》第二版第7章(快速排序)的思考題中被提到,是由Howard、Fine等教授提出的所謂“漂亮的”排序算法,代碼很漂亮但是很耗時。
該排序是一種低效的遞歸排序算法,不僅慢於一般的有效排序算法(如:插入排序,合併排序,堆排序和快速排序),甚至慢於冒泡排序。所以相比於經典的排序算法,STOOGE算法具有非常差的性能。

時間複雜度:

最差的時間複雜度為:O(n^log(3/2)3)
最差的空間複雜度為: O(n^2.7)
可見此算法效率相當的低下,比選擇、插入、冒泡排序更差!

實現

如果最後一個值小於第一個值,則交換這兩個數
如果當前集合元素數量大於等於3:
1.使用臭皮匠排序前2/3的元素
2.使用臭皮匠排序後2/3的元素
3.再次使用臭皮匠排序前2/3的元素
package com.baobaotao.test;/*** 排序研究* @author benjamin(吳海旭 * @email [email protected] / [email protected]  *  */  public class Sort {      /**      * 臭皮匠排序      * @param array       */       public static void stoogeSort(int[] array) {           stoogeSort(array, 0, array.length-1) ;           }               /**            * 重載臭皮匠排序             * @param array              * @param low               * @param high               */        public static void stoogeSort(int[] array, int low, int high) {                printArr(array) ;                if(array[low] > array[high]) {                    swap(array, low, high) ;                }                if(low + 1 >= high) return ;                int third = (high-low+1)/3 ;                stoogeSort(array, low, high-third) ;                stoogeSort(array, low+third, high) ;                stoogeSort(array, low, high-third) ;           }           /**            * 按從小到大的順序交換數組             * @param a 傳入的數組             * @param b 傳入的要交換的數b             * @param c    傳入的要交換的數c              */    public static void swap(int[] a, int b, int c) {   if(b == c) return ;   int temp = a[b] ;   a[b] = a[c] ;   a[c] = temp ;     }   /**     * 列印數組     * @param array     */        public static void printArr(int[] array) {                for(int c : array) {                    System.out.print(c + " ");                    }                    System.out.println();             }             public static void main(String[] args) {             int[] number={11,95,45,15,78,84,51,24,12} ;             stoogeSort(number) ;             }    }

相關詞條

熱門詞條

聯絡我們