很久没有更新csdn上的内容了,从上学期开始期末备考之后,到目前寒假已经过了大半,csdn相对于我来说,像是一种自己的学习笔记,虽然到现在很长时间没有接触到新的知识,但是每天也在做着日常的练习题,今天拿出做题中经常用到的快速排序算法来分享一下
什么是快速排序算法
"快速排序"顾名思义,就是计算速度非常快的一种针对排序的算法,是七大排序算法中时间复杂度最小,排序最快的一种算法.
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序的基本原理及其流程
首先给定一个未排序数组(这里以未排序数组进行示范)
这是一个大小为6的一个未排序整数数组
先选中一个任意基准值,这里以最左边的数5为基准值,然后从右往左遍历,找到第一个小于基准值的数字,然后进行交换.
交换完成之后,再以基准值从左往右进行比较,找到第一个大于基准值的数进行交换
,交换完成后,再次以基准值从右往左进行比较,并与第一个小于基准值的数进行交换,不断重复上述步骤,直到基准值左边得数 都小于基准值,右边的数都大于基准值,
之后将基准值左边的数与右边的数分成两个数组,分别重复以上步骤,最后即可得到一个已排序数组
如此,便得到一个已排序数组,0,3,4,5,6,9
快速排序代码(C语言)
void QuickSort(int* a, int left, int rit) {
if (left > rit)
return;
int tmp;//交换数据中间变量
int i = left, j = rit;
while ( i < j) {
while (i<j && a[i] <= a[j]) {
j--;
}//从右往左,找到第一个小于基准值的数
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
while (i < j && a[i] <= a[j]) {
i++;
}//从左往右,找到第一个大于基准值的数
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}//以a[i]为基准值进行排序
QuickSort(a, left, i - 1);
QuickSort(a, i + 1, rit);
//运用递归进行带入
}//快速排序
int main() {
int a[10];
printf("请输入待排序的十个数\n");
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}//初始化未排序数组
QuickSort(a, 0, 9);//将未排序数组带入函数
for (int j = 0; j < 10; j++) {
printf("%d\n", a[j]);
}
return 0;
}