cpp—快速排序

快速排序是对冒泡的一种改进

 

基本思想:通过一趟排序将数据分为两个部分,一部分的所有数据要比另一部分的所有数据都要小,然后再按此方法对两部分数据分别进行快速排序,整个过程可通过递归实现。

 

实现过程:

对于数据A[0],….A[n-1],首先任意选取一个数据(通常选第一个)作为关键数据,将所有比它小的防到它前面,大的放在后面,这一趟称为快速排序

一趟排序的过程:

1.设置两个变量I,j。 i=0,j=N-1。

2.以第一个元素作为关键数据,赋值给key,key=A[0];

3.从j往前搜索,j--,找到第一个小于key的数A[j],将A[j],A[i]互换

4.从i往后搜索,i++,找到第一个大于key的数A[i],互换A[i],A[j]

5.重复3,4步,直到i==j。

 

上面就是一趟排序的过程,为了得到最后结果,需要对两边的数组再进行排序,然后再分解数组,直到数组不能分解为止(只有一个数据),整个过程就是递归。

 

c++可以用函数qsort()直接为数组进行快速排序,也就是封装了快速排序的算法。

用 法:

void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));

参数:

  1 待排序数组首地址

  2 数组中待排序元素数量

  3 各元素的占用空间大小

  4 指向函数的指针,用于确定排序的顺序

 

#include <stdio.h>
#include <stdlib.h>
 
void sort(int *a, int left, int right){
    if(left>=right) //表明数据只有一个元素了,完成
        return;
 
    int i=left;
    int j=right;
    int key=a[left];
 
    while(i<j){ /*控制在当组内寻找一遍*/
        while(i<j && key<=a[j])
            j--;
        a[i]=a[j];
 
        while(i<j && key>=a[i])
            i++;
        a[j]=a[i];
    }
 
    a[i]=key;/*当在当组内找完一遍以后就把中间数key回归*/
    sort(a, left, i-1); //左边数组继续排序,i是不用排的
    sort(a,i+1,right); //右边数组继续排序,i是不用排的
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值