排序算法之選擇排序
時間復雜度:O(n2)
空間復雜度:O(1)
是否穩定:不穩定 1
算法:
快速排序(QuickSort)是對冒泡排序的一種改進。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
Java實現如下
package prs.rfh.algorithm.sort;
/**
* @author Swift
* @version $Algorithm: QuickSort, v 0.1 2017/1/9 16:54 Swift Exp $$
*/
public class QuickSort {
/**
* 選取數組的begin位元素為標志位,并通過與數組的其他元素交換位置來使該元素以前的
* 元素都不比他本身大,以后的元素都不比他小。然后遞歸的排序其以前和以后的部分
* @param array
* @param begin
* @param end
* @return
*/
private static int[] quickSort(int[] array, int begin, int end) {
int index = begin;
int i = end,j=begin;
//使該元素以前的元素都不比他本身大,以后的元素都不比他小
while(i>j) {
for (;i > index; i--) {
if(array[index]>array[i]){
int temp = array[index];
array[index] = array[i];
array[i] = temp;
index = i;
}
}
for (; j < index; j++) {
if(array[index]<array[j]){
int temp = array[index];
array[index] = array[j];
array[j] = temp;
index = j;
}
}
}
//分兩部分遞歸調用
if (index-begin>2) quickSort(array, begin, index-1);
if (end - index + 1 >2) quickSort(array, index + 1, end);
return array;
}
public static int[] quickSort(int[] array) {
if (array==null)
throw new IllegalArgumentException("參數非法");
return quickSort(array, 0, array.length-1);
}
}
【1】穩定性:
快速排序會因為與index的交換而破壞穩定性,所以選擇排序不是一個穩定的排序算法。</br>
<i>@author Swift</i>
<i>@date 2017-1-9</i>