算法原理:
取最左边的元素作为一个基值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;
}
运行结果:
