算法讲解
链接: 点击跳转BliBili
代码实现
#include <stdio.h>
#include <stdlib.h>
void quickSort(int array[], int LEFT, int RIGHT) {
if(LEFT >= RIGHT) {//表明只有一个数字了,默认有序,停止排序
return;
}
int left = LEFT;//左下标
int right = RIGHT;//右下标
int pivot = array[left];//"轴"点,是一个值,不是一个下标
while(left < right) {
while(left < right && array[right] >= pivot) { //下标没重合&右下标值大于"轴"点=>并不需要移动
right--;
}
if(left < right) { //下标没重合&右下标值小于"轴"点=>需要移动左下标处
array[left] = array[right];
}
while(left < right && array[left] <= pivot) {
left++;
}
if(left < right) {
array[right] = array[left];
}
if(left >= right) {
array[left] = pivot;
}
}
quickSort(array, LEFT, right - 1);
quickSort(array, right + 1, RIGHT);
}
int main() {
int n, k;
printf("输入n个数字,创建一个数组,并且进行升序排序...\n");
scanf("%d",&n);
int array[n];
for(int i = 0; i < n; i++) {
scanf("%d",&k);
array[i] = k;
}
quickSort(array, 0, n - 1);
printf("快速排序后,结果为\n");
for(int i = 0; i < n; i++) {
printf("%d ", array[i]);
}
}