文章目录
1、快速排序概述
给你一组数
随机选一个数与最后一个数做交换 划分值,
小于这个数的都放左边,(和小于区的下一个数做交换,i++)
等于这个数的放中间(i++)
大于这个数的都放右边(和大于区的前数做交换i不动)
最后将这个数和大于这个数最左边的进行交换
依次执行这个过程
2、代码实现
#include
#include
#include
void swap(int arr[],int L,int R)
{
int temp = arr[L];
arr[L] = arr[R];
arr[R] = temp;
}
int* partition(int arr[],int L,int R)
{
int less = L-1; // 左边界区
int more = R; // 右边界区
while(L < more) // 起始小于,右边界区
{
if(arr[L]arr[R]) // 大于划分值,右边界区左移,和当前数交换,当前数不移动
{
swap(arr,--more,L);
}
else // 相等,当前数向前走
{
L++;
}
}
swap(arr,more,R); // 划分值和右边界区第一个数 交换
int* new = (int *)malloc(8);
new[0] = less+1; // 将相等区的最左边给他
new[1] = more; // 将相等区右边给他
return new; //最后放回
}
void quicksort(int arr[],int L,int R)
{
if(L