快速排序(输出中间过程)

   1: #include <cstdio>
   2: #include <algorithm>
   3: using namespace std;
   4: const int maxn=10000;
   5: int a[maxn],n;
   6:  
   7: int Partition(int l,int r)
   8: {
   9:     int key=a[l];
  10:     while(l<r)//结果:关键值左边小于关键值,右边反之
  11:     {
  12:         while(l<r&&a[r]>=key) r--;
  13:         a[l]=a[r];
  14:         while(l<r&&a[l]<=key) l++;
  15:         a[r]=a[l];
  16:     }
  17:     a[l]=key;
  18:     return l;
  19: }
  20:  
  21: void print()
  22: {
  23:     int i;
  24:     for(i=1;i<n;i++)
  25:         printf("%d ",a[i]);
  26:     printf("%d\n",a[i]);
  27: }
  28:  
  29: void Qsort(int l,int r)
  30: {
  31:     int k;
  32:     if(l<r)
  33:     {
  34:         k=Partition(l,r);//k为支点
  35:         print();//输出当前排序情况
  36:         Qsort(l,k-1);//递归快排支点左边
  37:         Qsort(k+1,r);//递归快排支点右边
  38:     }
  39: }
  40:  
  41: int main()
  42: {
  43:     int i;
  44:     scanf("%d",&n);
  45:     for(i=1;i<=n;i++)
  46:         scanf("%d",a+i);
  47:     Qsort(1,n);
  48:     return 0;
  49: }

转载于:https://www.cnblogs.com/zyx1314/p/3587708.html

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮你解答关于快速排序的问题并展示每一趟的过程。以下是一个使用C语言实现快速排序的示例代码: ```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); // 初始化较小元素的索引 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); // 打印每趟排序的结果 printf("第%d趟排序结果:", low); for (int i = low; i <= high; i++) { printf("%d ", arr[i]); } printf("\n"); } } // 测试 int main() { int arr[] = { 64, 25, 12, 22, 11 }; 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; } ``` 这段代码会先输出初始数组,然后在每一趟排序后输出排序结果。你可以通过运行代码来查看每一趟的结果。希望能对你有帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值