快速排序
基本思想:任取待定排序序列中的某個元素作爲標準(一般取第一個元素),通過一次劃分,將待排元素分爲左右兩個子序列,左子序列中元素小於基準元素,右子序列大於或等於基準元素,然後對兩個子序列繼續進行劃分,直至每一個序列只有一個元素爲止。
時間效率:
空間效率:
算法穩定性:不穩定
//快速排序
public class Sort_f {
private void fastSort(int nums[],int start,int end){
if(start<end){
int i = start;//左指針
int j = end;//右指針
int key = nums[start];//關鍵元素(用來比較的元素)
while(i<j){
while(i<end && nums[++i]<key);//找到一個左邊大於關鍵元素的數組元素
while(j>end && nums[j]>key)j--;//找到一個右邊小於關鍵元素的數組元素
if(i<j){
swap(nums,i,j);
}
}
//遞歸
swap(nums,start,j);
fastSort(nums,start,i-1);
fastSort(nums,j+1,end);
}
}
//交換函數
private void swap(int nums[],int i,int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
//測試主函數
public static void main(String[] args) {
int nums[]={7,4,6,5,4,4,3,2,1};
Sort_f test = new Sort_f();
int length = nums.length;
test.fastSort(nums,0,length-1);
System.out.println(java.util.Arrays.toString(nums));
}
}