【问题描述】利用快速排序思想实现一系列1000以内的正整数的排序。(备注:总数据量不超过200。样例输出中的count=7表示总共进行了7趟排序!) 【输入形式】输入若干1000以内的正整数,-1结束输入。 【输出形式】先输出排序前的原始数据,再输出每趟快速排序后的数据;最后输出排好序的结果以及总共进行了多少趟排序。 【样例输入】 6 8 7 9 0 1 3 2 4 5 -1 【样例输出】 排序前:6 8 7 9 0 1 3 2 4 5 5 4 2 3 0 1 6 9 7 8 1 4 2 3 0 5 6 9 7 8 0 1 2 3 4 5 6 9 7 8 0 1 2 3 4 5 6 9 7 8 0 1 2 3 4 5 6 9 7 8 0 1 2 3 4 5 6 8 7 9 0 1 2 3 4 5 6 7 8 9 排序后:0 1 2 3 4 5 6 7 8 9 count=7 使用c语言解决
时间: 2024-01-02 07:03:05 浏览: 96
快速排序 可实现1000的数的排序
3星 · 编辑精心推荐
下面是使用C语言实现快速排序的代码:
```c
#include <stdio.h>
void quick_sort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int pivot = arr[left];
int i = left, j = right;
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quick_sort(arr, left, i - 1);
quick_sort(arr, i + 1, right);
}
int main() {
int arr[200];
int i = 0;
while (1) {
int n;
scanf("%d", &n);
if (n == -1) {
break;
}
arr[i++] = n;
}
printf("排序前:");
for (int j = 0; j < i; j++) {
printf("%d ", arr[j]);
}
printf("\n");
quick_sort(arr, 0, i - 1);
printf("排序后:");
for (int j = 0; j < i; j++) {
printf("%d ", arr[j]);
}
printf("\n");
return 0;
}
```
需要注意的是,题目要求输出每趟快速排序后的数据和进行了多少趟排序,因此我们需要对快速排序进行一些修改。具体来说,我们可以将快速排序的过程分为两个部分:划分和排序。在划分的过程中,我们可以输出当前的数组,以及划分后的两个子数组。在排序的过程中,我们可以使用一个变量来记录进行了多少趟排序。下面是修改后的代码:
```c
#include <stdio.h>
void quick_sort(int arr[], int left, int right, int* count) {
if (left >= right) {
return;
}
int pivot = arr[left];
int i = left, j = right;
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
printf("%d:", ++(*count));
for (int k = left; k <= right; k++) {
printf("%d ", arr[k]);
}
printf("\n");
quick_sort(arr, left, i - 1, count);
quick_sort(arr, i + 1, right, count);
}
int main() {
int arr[200];
int i = 0;
while (1) {
int n;
scanf("%d", &n);
if (n == -1) {
break;
}
arr[i++] = n;
}
printf("排序前:");
for (int j = 0; j < i; j++) {
printf("%d ", arr[j]);
}
printf("\n");
int count = 0;
quick_sort(arr, 0, i - 1, &count);
printf("排序后:");
for (int j = 0; j < i; j++) {
printf("%d ", arr[j]);
}
printf("\n");
printf("count=%d\n", count);
return 0;
}
```
注意,在调用`quick_sort`函数时,我们需要将`count`变量的地址传入,以便在函数中修改它的值。
阅读全文