算法原理:
取最左边的元素作为一个基值base ,将数组分为大于base 的区间和小于base 的区间,利用递归算法直到排序完成。下面是用c语言实现的产生随机数的算法。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define ARRAYLEN 10
int Division(int a[], int left, int right){
int base = a[left];
while (left < right){
while (left < right && a[right] > base){
--right;
}
a[left] = a[right];
while (left < right && a[left] < base){
++left;
}
a[right] = a[left];
}
a[left] = base;
return left;
}
void QuickSort(int a[], int left, int right){
int i;
if (left < right){
i = Division(a, left, right);
QuickSort(a, left, i - 1 );
QuickSort(a, i + 1 , right);
}
}
void printArr(int arr[], int n){
for (int i = 0 ; i < n; i++){
printf (" %3d" , arr[i]);
}
}
int main(){
srand(time(NULL));
int a[ARRAYLEN];
for (int i = 0 ; i < ARRAYLEN; i++){
a[i] = rand() % 99 + 1 ;
}
printf ("原始数据为:\n" );
printArr(a, ARRAYLEN);
printf ("\n" );
QuickSort(a, 0 , ARRAYLEN - 1 );
printf ("快排之后数据为:\n" );
printArr(a, ARRAYLEN);
printf ("\n" );
system("pause" );
return 0 ;
}
运行结果: