快速排序模板(C語言)
快排的基本思想是,通過一趟排序將要排序的數據分割成獨立的兩部分,其中的一部分數據比另一部分的數據都要小,或者都要大,然後再把這兩個獨立的部分進行快速排序,整個過程可以用遞歸來進行。
#include<stdio.h>
void quicksort(int a[], int low, int high) // 從小到大
{
int l ,r, key;
l = low;
r = high;
key = a[l];
if(low > high) return ;
while(l < r) //
{
while(l < r && a[r] > key) // 從右往左找到比key小的元素
r--;
a[l] = a[r]; // 交換之後, r之後的元素都比key大
while(l < r && a[l] < key)// 從左往右找到比key大的元素
l++;
a[r] = a[l];//交換之後, l之前的元素都比key小
//之後再將l到r之間的元素進行排序
}
a[l] = key;
// 此時0到l-1的元素都比l+1到high的元素小
//但是0到l-1的元素和l+1到high的元素都是無序的
quicksort(a, low, l-1); // 將0到l-1的元素進行快速排序
quicksort(a, l+1, high); //將l+1到high的元素進行快速排序
}
int main()
{
int a[100];
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
quicksort(a, 0, n-1);
for(int i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}