// 快速排序,quickSort
// O(n*logn),不稳定
#include <cstdio>
int partition(int arr[], int l, int r)
{
int i = l, j = r, x = arr[l];
while(i < j)
{
while(i < j && arr[j] >= x)
j--;
arr[i] = arr[j];
while(i < j && arr[i] < x)
i++;
arr[j] = arr[i];
}
arr[i] = x;
return i;
}
void quickSort(int arr[], int l, int r)
{
if(l < r)
{
int mid = partition(arr, l, r);
quickSort(arr, l, mid-1);
quickSort(arr, mid+1, r);
}
}
void quickSort2(int arr[], int l, int r)
{
if(l < r)
{
int i = l , j = r, mid = arr[l];
while(i < j)
{
while(i < j && arr[j] >= mid)
j--;
arr[i] = arr[j];
while(i < j && arr[i] < mid)
i++;
arr[j] = arr[i];
}
arr[i] = mid;
quickSort2(arr, l, i-1);
quickSort2(arr, i+1, r);
}
}
int main()
{
int arr[] = {1,3,4,5,2,6,9,7,8,0};
int n = sizeof(arr)/sizeof(arr[0]);
// quickSort(arr, 0, n-1);
quickSort2(arr, 0, n-1);
for(int i = 0; i < n; i++)
printf("%d ",arr[i]);
return 0;
}
// 思路:挖坑填坑 + 二分(交换排序)
// 参考博客:http://blog.csdn.net/morewindows/article/details/6684558
快速排序,quickSort
最新推荐文章于 2022-12-12 16:30:20 发布