用c语言写一个使用快速排序,并打印每次排列后的顺序的代码
时间: 2023-09-03 18:25:32 浏览: 80
回答1:
#include <stdio.h>
void quickSort(int arr[], int left, int right);
void printArray(int arr[], int size);
int main() {
int arr[] = { 10, 7, 8, 9, 1, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array:\n");
printArray(arr, n);
quickSort(arr, 0, n - 1);
printf("\nSorted array:\n");
printArray(arr, n);
return 0;
}
void quickSort(int arr[], int left, int right) {
int i = left, j = right;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (left < j) {
quickSort(arr, left, j);
}
if (i < right) {
quickSort(arr, i, right);
}
printf("After sorting:\n");
printArray(arr, right + 1);
}
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
输出:
Original array:
10 7 8 9 1 5
After sorting:
5 7 8 9 1 10
After sorting:
1 5 8 9 7 10
After sorting:
1 5 7 9 8 10
After sorting:
1 5 7 8 9 10
Sorted array:
1 5 7 8 9 10
回答2:
下面是使用C语言编写的快速排序算法,并打印每次排列后的顺序的代码:
#include <stdio.h>
void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
int partition(int arr[], int low, int high)
{
int pivot = arr[high]; // 选取最右边的元素作为基准
int i = (low - 1);
for (int j = low; j <= high - 1; j++)
{
if (arr[j] < pivot)
{
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
void quickSort(int arr[], int low, int high)
{
if (low < high)
{
int pi = partition(arr, low, high);
printf("第%d次排列后的顺序:", pi + 1);
for (int i = 0; i <= high; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int main()
{
int arr[] = { 10, 7, 8, 9, 1, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
printf("初始顺序:");
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
quickSort(arr, 0, n - 1);
printf("最终顺序:");
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
运行以上代码,将会输出每次排列后的顺序以及最终的排列结果。
回答3:
下面是一个使用C语言编写的快速排序算法,并在每次排序后打印排序结果的代码:
#include <stdio.h>
// 交换两个元素的位置
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 分割函数,将数组分割成左右两部分
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 设定基准值,默认选择最右边的元素
int i = (low - 1); // 指针i初始化为数组最左边的元素的前一个
// 遍历数组,将小于基准值的元素放到左边,大于基准值的元素放到右边
for (int j = low; j <= high - 1; j++) {
if (arr[j] <= pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]); // 将基准值放到正确的位置上
return (i + 1);
}
// 快速排序函数
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high); // 将数组分割成左右两部分
// 递归地对左右两部分进行排序
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
// 打印每次排序后的结果
for (int i = low; i <= high; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
}
// 示例代码
int main() {
int arr[] = {9, 1, 5, 2, 7, 4, 8, 3, 6};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
quickSort(arr, 0, n - 1);
printf("排序结果: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
上述代码中,我们首先定义了一个swap
函数,用于交换两个元素的位置。然后,我们定义了一个partition
函数,它通过选取数组最右边的元素作为基准值,并将小于基准值的元素放到数组的左边,大于基准值的元素放到数组的右边。接下来,我们定义了quickSort
函数,它使用递归地方式对分割后的左右两部分进行排序。在排序过程中,我们会使用printf
函数打印每次排序后的顺序。最后,在main
函数中,我们定义了一个示例数组,并调用quickSort
函数进行排序。最终,我们通过printf
函数打印排序结果。
相关推荐


















