快速排序

(数据结构 “快速排序” 学习整理,及个人理解)
 1.  本质上是一种分治思想(表格实例) :
01234567
241526109439713

首先将 24 作为关键字 low =0(直接等于1,也可以不影响结果,但要考虑只有一个数的情况 )high=7

01234567
131526109439724

先从high开始,high=7时13 小于 24 所以交换位置(代码中可以只将13换过去,而24先不放进去,直到最后low=high时,也就是确定位置后直接将 24放入节约交换次数(不懂没关系往下看))。high依旧=7

01234567
131524109439726

再看low 向后走知道找到比24大的数字 ,是26 ,low=2,将26与24交换。

01234567
131591024439726

再看high 向前走 找到比24小的数,(相等的数依旧在原位,是不进行交换的)
比24 小的数是 9 将24 与9 交换

01234567
131591024 (low ,high)439726

low向后走没有发现比24大的数字,当low与high重合时,一次交换结束

 这之后

将数组分为两半 第一半 low=0 ,high=3;另一半 low=5,high=7.
分别对两部分重复上述过程。
直至所有小部分low=high
说明排序完成。

#include <stdio.h>
#include <stdlib.h>
#include <ctime>
void QuickSort(int **num,int head,int tail);
#define N 10
int main()
{
    int *num=(int *)malloc(sizeof(int)*N);
    srand(time(NULL));
    for(int i=0;i<N;i++)
        num[i]=rand()%(i*200+100);
    QuickSort(&num,0,N-1);
    for(int i=0;i<N;i++)
        printf("%d ",num[i]);

}

void QuickSort(int ** num,int head ,int tail)  *****快速排序函数
{
    int h=head,t=tail;
    if (head<tail)
    {
        int te=*(*num+head);
        while(head<tail)
        {
            while (head<tail&&*(*num+tail)>te)
                tail--;
            *(*num+head)=*(*num+tail);
            while(head<tail&&*(*num+head)<te)
                head++;
            *(*num+tail)=*(*num+head);
        }
        *(*num+head)=te;
        QuickSort(num,h,tail-1);
        QuickSort(num,head+1,t);
    }
}

(代码是看书(数据结构,严蔚敏教授)理解后敲的);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值