首页 新闻 会员 周边 捐助

快速排序,有一个样例过不了,佬帮我看看

0
[待解决问题]

题目

本题目要求读入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)

然淼的主页 然淼 | 菜鸟二级 | 园豆:202
提问于:2024-12-16 11:32
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册