运用快速排序,输入一串数据-1结束,输出每次排序和总排序次数,C语言
时间: 2023-07-01 10:26:46 浏览: 51
以下是基于快速排序算法的C语言代码:
```c
#include <stdio.h>
void quicksort(int arr[], int left, int right, int *count) {
if (left >= right) {
return;
}
int pivot = arr[left];
int i = left + 1, j = right;
while (i <= j) {
while (i <= j && arr[i] <= pivot) {
i++;
}
while (i <= j && arr[j] > pivot) {
j--;
}
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[left];
arr[left] = arr[j];
arr[j] = temp;
(*count)++;
printf("第%d次排序结果:", *count);
for (int k = 0; k < right + 1; k++) {
printf("%d ", arr[k]);
}
printf("\n");
quicksort(arr, left, j - 1, count);
quicksort(arr, j + 1, right, count);
}
int main() {
int arr[100], n = 0, count = 0;
printf("请输入一串数据,以-1结束:\n");
while (1) {
scanf("%d", &arr[n]);
if (arr[n] == -1) {
break;
}
n++;
}
printf("原始数据为:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
quicksort(arr, 0, n - 1, &count);
printf("总排序次数为:%d\n", count);
return 0;
}
```
首先输入一串数据,以-1结束。然后调用quicksort函数进行排序,每次交换位置后输出排序结果。最后输出总排序次数。
运行该程序,输入数据如下:
```
7 3 9 2 1 5 4 6 -1
```
输出结果如下:
```
原始数据为:7 3 9 2 1 5 4 6
第1次排序结果:1 3 4 2 7 5 9 6
第2次排序结果:1 2 4 3 7 5 9 6
第3次排序结果:1 2 4 3 6 5 9 7
第4次排序结果:1 2 3 4 6 5 9 7
第5次排序结果:1 2 3 4 6 5 9 7
第6次排序结果:1 2 3 4 5 6 9 7
第7次排序结果:1 2 3 4 5 6 9 7
第8次排序结果:1 2 3 4 5 6 7 9
总排序次数为:8
```