需求:给定数组从小到大排序
<p>
</p><p>快速排序</p><p>思路:1、选定第一个数字为标识flag,将数组分成两部分,一部分比flag大,一部分比flag小,</p><p> 2、再将得到的两部分分别进行1,直到完成</p><p> 第一步实现:1、从后向前,找到比flag小的,放到空中,自身空出来</p><p> 2、从前向后,找到比flag大的,放到空中,自身空出来</p><p> 3、只到,向前向后指针相遇,把flag放到相遇点</p><p> 是按照这个思路做的<a target=_blank href="http://blog.csdn.net/morewindows/article/details/6684558">http://blog.csdn.net/morewindows/article/details/6684558</a></p>
private static void QuickSort(int[] arr, int start, int end) {
if (start < end) {
int flag = find(arr, start, end);
QuickSort(arr, start, flag);
QuickSort(arr, flag + 1, end);
}
}
private static int find(int[] arr, int start, int end) {
int i = start;
int j = end;
int flag = arr[i];
while (i < j) {
while (arr[j] >= flag && i < j) {
j--;
}
if (i < j) {
arr[i] = arr[j];
}
while (arr[i] <= flag && i < j) {
i++;
}
if (i < j) {
arr[j] = arr[i];
}
}
arr[i] = flag;
return i;
}
最坏O(n^2)
最好O(nlogn)