1.什么是快速排序法?
快速排序法是一种分治的排序算法,它将一个数据集分成两个小的,并对这两个子集分别进行快速排序。在快速排序中,首先从数列中取出一个元素作为基准(即枢轴),然后将数列中比这个元素大的放在它的右边,比它小的放在它的左边,然后再对左右两个子集分别进行快速排序,直到整个数列有序。
以下是快速排序的一个简单示例:给定数字3, 8, 6, 2, 9, 1,首先以3为基准,将大于3的数8,6,9放到一边,小于3的数2,1放到一边。然后再对小于3和大于3的两部分数据分别使用快速排序,最终得到的排序结果如下:1,2,3,6,8,9。
C语言源码
#include <stdio.h>
//定义函数,用来对数组进行快速排序
void quickSort(int array[],int left, int right){
int i = left; //左标记
int j = right; //右标记
//中间值=数组的第(left+right)/2个元素
int pivot = array[(left + right) / 2];
int temp; //临时变量
//while循环,排序条件
while (i <= j ){
//比中间值小的放在左边,比中间值大的放在右边
while (array[i] < pivot){ //从左向右寻找大于中间值的元素
i++;
}
while (array[j] > pivot){ //从右向左寻找小于中间值的元素
j--;
}
//如果i<=j,则将相应的数据交换
if (i <= j){
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}
//递归分解
if (left < j){
quickSort(array, left, j); //将分割后的子集重新排序
}
if (right > i){
quickSort(array, i, right);
}
}
// 定义输出函数
void showArray(int array[], int size){
int i;
for (i = 0; i < size; i++) {
printf(“%d\t”, array[i]);
}
printf(“\n”);
}
//定义主函数
int main(){
int array[] = {3, 8, 6, 2, 9, 1};
int size = sizeof(array) / sizeof(array[0]);
printf("排序前的数组:\n");
showArray(array, size);
quickSort(array, 0, size-1);
printf("排序后的数组:\n");
showArray(array, size);
return 0;
}
版权声明:本文为weixin_46121540原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。