常用排序演算法

2021-07-16 08:06:20 字數 3124 閱讀 4152

常用排序演算法有:氣泡排序、直接插入排序、選擇排序、快速排序、歸併排序和堆排序。下面給出部分演算法的原始碼:

氣泡排序

/**

* 氣泡排序

* 時間複雜度 最壞o(n^2) 最好o(n) 平均o(n^2) 穩定

* @param array

* @return

*/public static int bubblesort(int array)

}if (flag == 0)

break;

}return array;

}

選擇排序

/**

* 選擇排序

* 時間複雜度 最壞o(n^2) 最好o(n^2) 平均o(n^2) 不穩定

* @param array

* @return

*/public static int selectsort(int array)

}array[pos] = array[len-i-1];

array[len-i-1] = max;

}return array;

}

直接插入排序

/**

* 插入排序

* 時間複雜度 最好o(n) 最壞o(n^2) 平均o(n^2) 穩定

* @param array

* @return

*/public static int insertionsort(int list)

list[j] = tmp;

}return list;

}

快速排序

/**

* 快速排序

* 時間複雜度 最好o(nlogn) 最壞o(n2) 平均o(nlogn) 不穩定

* @param array

* @param start

* @param end

*/public static void quicksort(int array, int start, int end)

while(low < high && array[low] <= key) low++;

if(low < high)

}array[low] = key;

quicksort(array, start, low-1);

quicksort(array, low+1, end);

}}

快速排序的分割函式

/**

* 快速排序的分割函式

* 時間複雜度o(n)

* 適用於:求陣列中第k個最小值 分割函式+二分 確定k-1位置處的值

* 求陣列的k個最小值,確定k-1位置處的值,其左側的k-1個數都是小於k-1位置的

* @param array

* @param start

* @param end

* @return

*/public static int partition(int array, int start, int end)

while(low < high && array[low] <= key) low++;

if(low < high)

}array[low] = key;

return low;

}return -1;

}

歸併排序

/**

* 歸併排序

* 時間複雜度 最好o(nlogn) 最壞o(nlogn) 平均o(nlogn) 穩定

* 空間複雜度o(n)

* @param array

* @param start

* @param end

* @param tmparray 所有公用tmparray,避免每個合併時 需要new乙個陣列

*/public static void mergesort(int array, int start, int end, int tmparray) else

}while(left <= middle)

tmparray[pos++] = array[left++];

while(right <= end)

tmparray[pos++] = array[right++];

for(int i = start; i <= end; i++)

array[i] = tmparray[i];

}}

堆排序相關

/**

* 插入堆

* @param array

* @param value 即將插入的元素

* @param n 堆中元素總數

*/public static void insertheap(int array, int value, int n) else

array[pos] = array[j];

pos = j;

j = (pos - 1)/2;

}array[pos] = value;

}}/**

* 刪除堆頂元素 重新調整最小堆

* 由於是陣列,直接覆蓋元素即可

* @param array

* @param n 堆中元素總數

*/public static void deleteheap(int array, int n) else

} else

if(minsubnode >= key)

break;

array[pos] = minsubnode;

pos = subnode;

subnode = 2*pos + 1;

}array[pos] = key;

}

如有問題,歡迎指正。

常用排序演算法

筆者最近學習演算法,學了很久也只弄懂了幾個排序演算法,在這裡曬一下下,作為以後參考之用。一 為什麼要研究排序問題 許多計算機科學家認為,排序演算法是演算法學習中最基本的問題,原因有以下幾點 l有時候應用程式本身需要對資訊進行排序,如為了準備客戶賬目,銀行需要對支票賬號進行排序 l很多演算法將排序作為...

常用排序演算法

一 簡單排序演算法 由於程式比較簡單,所以沒有加什麼注釋。所有的程式都給出了完整的執行 並在我的vc環境 下執行通過。因為沒有涉及mfc和windows的內容,所以在borland c 的平台上應該也不會有什麼 問題的。在 的後面給出了執行過程示意,希望對理解有幫助。1.冒泡法 這是最原始,也是眾所...

常用排序演算法

排序演算法 最好時間 平均時間 最壞時間 輔助空間 穩定性 直接插入排序 o n o n 2 o n 2 o 1 穩定 希爾排序 o n 1.3 o 1 不穩定 直接選擇排序 o n 2 o n 2 o n 2 o 1 不穩定 堆排序 o n x lbn o n x lbn o n x lbn o ...