本题目要求读入N个整数,采用快速排序法进行排序,输出前3轮排序后的结果。
输入格式:
输入不超过100的正整数N和N个整数(空格分隔)。
输出格式:
输出三行,第一行为第一轮排序结果,第二行为第二轮排序结果,第三行为第三轮排序结果。数据间用一个空格分隔。
为简便起见,最后一个元素后也有一个空格。
输入样例:
7
4 3 1 5 2 7 6
输出样例:
2 3 1 4 5 7 6
1 2 3 4 5 7 6
1 2 3 4 5 7 6
c
#include <stdio.h>
//交换
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
//分区函数
int partition(int num[], int low, int high) {
int pivot = num[low]; // 选择第一个元素作为枢轴
int i = low + 1;
for (int j = low + 1; j <= high; j++) {
if (num[j] < pivot) {
swap(&num[i], &num[j]); // 将小于枢轴的元素移到左边
i++;
}
}
swap(&num[low], &num[i - 1]);
return (i - 1);
}
//快速排序
void quickSort(int num[], int low, int high, int* round, int n) {
if (low < high) {
int pi = partition(num, low, high);//根据pivot值分区
if (*round < 3)
{
for (int i = 0; i < n; i++)
{
printf("%d ", num[i]);
}
printf("\n");
(*round)++;
}
// 对左右进行递归排序
quickSort(num, low, pi - 1, round, n);
quickSort(num, pi + 1, high, round, n);
}
}
int main() {
int N;
scanf("%d", &N);
int num[N];
for (int i = 0; i < N; i++) {
scanf("%d", &num[i]);
}
int round = 0;
quickSort(num, 0, N - 1, &round, N);
return 0;
}
python
def quicksort(arr, low, high):
global i
if low < high:
pi = partition(arr, low, high) # 进行分区操作,获取基准元素的索引位置
if(i<3):
print("{}".format(" ".join(map(str, arr))))
i+=1
quicksort(arr, low, pi - 1) # 对基准元素左侧的子数组进行递归排序
quicksort(arr, pi + 1, high)
def partition(arr, low, high):
# 选择基准元素为区间的第一个元素
pivot = arr[low]
i = low + 1 # 从第二个元素开始遍历数组
for j in range(low + 1, high + 1):
if arr[j] <= pivot: # 如果当前元素小于或等于基准元素,将其与第一个元素交换位置
arr[i], arr[j] = arr[j], arr[i]
i += 1 # 将i向前移动一位,继续遍历数组
# 最后将基准元素与最后一个未交换的元素交换位置,使得基准元素的位置固定下来
arr[low], arr[i - 1] = arr[i - 1], arr[low]
return i - 1
if __name__ == "__main__":
n = int(input())
nums = list(map(int, input().split()))
i=0
quicksort(nums, 0, n - 1)