#include<stdio.h>
void Swap(int arr[], int low, int high)
{
int temp;
temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}
int Partition(int arr[], int low, int high)
{
int base = arr[low];
while(low < high)
{
while(low < high && arr[high] >= base)
{
high --;
}
Swap(arr, low, high); //交换其实是主要判断 arr[high] >= base 是不是大于或者小于基准值
while(low < high && arr[low] <= base)
{
low ++;
}
Swap(arr, low, high); //交换其实是主要判断 arr[low] <= base 是不是大于或者小于基准值
}
return low;
}
void QuickSort(int arr[], int low, int high)
{
if(low < high)
{
int base = Partition(arr, low, high);
QuickSort(arr, low, base - 1);
QuickSort(arr, base + 1, high); // 在输入测试用例 0 1 3 2 4 5 时,我一直以为输入的high是已经移到最左边,与low一样都是0.后来明白了
//0 是函数内的high,已经被释放,而实际输入的high是一开始的high
//实际上在这个快速排序中high与low的值一直都未改变,改变的只有中间值base.
}
}
int main()
{
int n;
scanf("%d\n",&n);
int arr[n];
int i , j;
for(i = 0; i < n; i ++)
{
scanf("%d",&arr[i]);
}
QuickSort(arr, 0, n-1);
for(j = 0; j < n; j ++)
{
printf("%4d",arr[j]);
}
return 0;
}
C语言实现快速排序
最新推荐文章于 2024-01-25 11:00:35 发布