快速排序是現在計算機中排序演算法相對比較快的一種演算法,在各類語言中的排序演算法大都是快速排序演算法
現在我們來講解一下快速排序的原理及其實現:
快速排序最主要的思想就是,找到乙個基準點,然後把大於這個基準點的數放在後面,小於基準點的數放在前面然後根據這個基準點的位置進行遞迴分別處理前面後後面的陣列完成整個遞迴的過程。大體思路就是這樣。
簡單明瞭上**
//快速排序 //改變基準可以改變快排的速度
public static void quicksort(int arr,int l,int r)
int p = partition1(arr,l,r);
quicksort(arr,l,p-1);
quicksort(arr,p+1,r);
} private static int partition1(int arr, int l, int r)
int temp =arr[l];
arr[l]=arr[j];
arr[j]=temp;
return j;
}
在這個演算法中還有一些改進的地方,當你在選擇基準點的時候如果每次都選擇第乙個,而且陣列又是相對有序的話,那麼這個演算法的時間複雜度就會降到o(n2),所以在選擇基準點的時候我們應該隨機的選擇基準點,還有就是在進行左右分別處理的時候我們其實可以把等於基準點的數提取處理,不在進行遞迴處理改進**如下:
public static void devquicksort(int arr,int l,int r)
int v = arr[l];
int lt = l;
int gt = r+1;
int i =l+1;
while(iv) else if(arr[i]else
}int temp =arr[l];
arr[l]=arr[lt];
arr[lt]=temp;
devquicksort(arr,l,lt-1);
devquicksort(arr,gt,r);
}
快速排序及其改進
public class quciksort private static int partition comparable a,int low,int high a low pivot return low private static boolean less comparable v,comp...
堆排序原理及其實現 C
我們知道簡單選擇排序的時間複雜度為o n 2 熟悉各種排序演算法的朋友都知道,這個時間複雜度是很大的,所以怎樣減小簡單選擇排序的時間複雜度呢?簡單選擇排序主要操作是進行關鍵字的比較,所以怎樣減少比較次數就是改進的關鍵。簡單選擇排序中第i趟需要進行n i次比較,如果我們用到前面已排好的序列a 1.i ...
堆排序原理及其實現 C
我們知道簡單選擇排序的時間複雜度為o n 2 熟悉各種排序演算法的朋友都知道,這個時間複雜度是很大的,所以怎樣減小簡單選擇排序的時間複雜度呢?簡單選擇排序主要操作是進行關鍵字的比較,所以怎樣減少比較次數就是改進的關鍵。簡單選擇排序中第i趟需要進行n i次比較,如果我們用到前面已排好的序列a 1.i ...