完成快速排序函数,实现快速排序思想补充代码#include <stdio.h> void print(int a[] ,int n) {//输出数组元素,数字之间以一个空格为界,输出结束后换一行 for (int i = 0; i < n; i++) { printf("%d ", a[i]); } printf("\n"); } void qSort(int a[] ,int left, int right) // { } int main(void) { int num ; scanf("%d",&num); int data[num]; for(int i=0;i<num;i++) scanf("%d",&data[i]); qSort(data ,0,num-1); print(data,num); }
时间: 2024-03-12 12:44:08 浏览: 125
c代码-从键盘任意输入五个学生的姓名,按字典顺序。
下面是快速排序的实现代码:
```c
#include <stdio.h>
void print(int a[], int n) {
//输出数组元素,数字之间以一个空格为界,输出结束后换一行
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
int partition(int a[], int left, int right) {
int pivot = a[left]; // 以左边第一个元素作为枢纽元素
int i = left, j = right;
while (i < j) {
while (i < j && a[j] >= pivot) j--; // 从右往左找小于枢纽元素的元素
a[i] = a[j];
while (i < j && a[i] <= pivot) i++; // 从左往右找大于枢纽元素的元素
a[j] = a[i];
}
a[i] = pivot; // 把枢纽元素放回中间位置
return i;
}
void qSort(int a[], int left, int right) {
if (left >= right) return; // 只有一个元素或者没有元素
int pivotIndex = partition(a, left, right); // 划分为两个子序列
qSort(a, left, pivotIndex - 1);
qSort(a, pivotIndex + 1, right);
}
int main(void) {
int num;
scanf("%d", &num);
int data[num];
for (int i = 0; i < num; i++)
scanf("%d", &data[i]);
qSort(data, 0, num - 1);
print(data, num);
return 0;
}
```
这里的 `qSort` 函数实现了快速排序的思想,其中 `partition` 函数是划分子序列的过程,用于找到枢纽元素的位置并将序列分成两部分。然后,递归地对左右两个子序列进行排序。
阅读全文