数据结构算法设计——快速排序

一、基本内容

        快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一个部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据编程有序序列。

        也就是对于一个数组 A[0] , ...... , A[N-1] ,首先任取一个数据(一般是第一个数)作为基准位,然后把所有比它小的数放到它前面,所有比它大的数放到它后面,这个过程成为一趟快排。

二、代码

#include<stdio.h>
#include<iostream>
using namespace std;
int maxn=10000;
void Qsort(int *arr,int start,int end){
  if(start>=end){
    return;//终止条件 
  }
  int i=start;//每一部分的头 
  int j=end;//每一部分的尾 
  int key=arr[i];//基准位 
  while(i<j){//当头尾没有碰头的时候
    while(i<j&&arr[j]>=key){//如果key后面的数大于key,那么j就要往前移一位再比较 
      j--;
    }
    arr[i]=arr[j];//如果arr[j]位置上的数比arr[i]小,那就给arr[j]位置上的数放到arr[i]位置
    
    while(i<j&&arr[i]<=key){//对前半部分的操作同上 
      i++;
    }
    arr[j]=arr[i];
  } 
  //经过while循环之后,i=j,此时要把key保存的值放到这里
  arr[i]=key;//此时,key的左边是比key小的数,右边是比key大的数
  //进行递归,对左右两部分分别再进行快排
  Qsort(arr,start,i-1);//对左边快排 
  Qsort(arr,i+1,end); //对右边快排 
}
int main(){
  int n,arr[maxn]={0};//有n个数据
  cin>>n;
  for(int i=0;i<n;i++){
    cin>>arr[i];
  } 
  Qsort(arr,0,n-1);
  for(int i=0;i<n;i++){
    printf("%d ",arr[i]);
  }
  return 0;
}

三、解释说明

        代码的解释在注释中已经较为详细地讲解,注意 i 和 j 可以看做首尾指针,分别指向每一段的首尾元素,在此基础上理解代码。若理解有困难可以参考下文链接视频,相信会很清晰。

四、参考视频

C++入门到高级开发精解:58.快速排序 渥瑞达科技_哔哩哔哩_bilibili

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值