针对“快速排序算法的实现。任意输入20个整数,对这20个整数进行快速排序。要求使用末元素作为划分基准。”问题,给出其算法思想,并使用C语言进行编程
时间: 2024-05-14 10:15:01 浏览: 74
深入单链表的快速排序详解
算法思想:
快速排序是一种分治思想的排序算法,其基本思想是选择一个基准元素,将数组划分为两个子数组,使得左子数组中的所有元素小于基准元素,右子数组中的所有元素大于基准元素,然后递归地对左子数组和右子数组进行排序。
具体实现时,可以选择数组的最后一个元素作为基准元素,然后从数组的第一个元素开始遍历数组,将小于基准元素的元素放到数组的左边,将大于基准元素的元素放到数组的右边,最后将基准元素放到分界点的位置上。然后递归地对左右两个子数组进行排序,直到整个数组有序为止。
C语言代码实现:
```c
#include<stdio.h>
void quick_sort(int a[], int left, int right){
if(left >= right) return; // 递归终止条件
int i = left, j = right, x = a[right]; // 取末元素作为基准元素
while(i < j){
while(i < j && a[i] < x) i++; // 从左往右找第一个大于等于x的元素
if(i < j) a[j--] = a[i]; // 将大于等于x的元素放到右边
while(i < j && a[j] > x) j--; // 从右往左找第一个小于等于x的元素
if(i < j) a[i++] = a[j]; // 将小于等于x的元素放到左边
}
a[j] = x; // 将基准元素放到分界点的位置上
quick_sort(a, left, j-1); // 递归地对左子数组进行排序
quick_sort(a, j+1, right); // 递归地对右子数组进行排序
}
int main(){
int a[20];
printf("请输入20个整数:\n");
for(int i=0;i<20;i++){
scanf("%d", &a[i]);
}
quick_sort(a, 0, 19);
printf("排序后的结果为:\n");
for(int i=0;i<20;i++){
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
阅读全文