排序算法之快速排序

快速排序是众多算法中最具特点的算法,在方法上,和冒泡属于交换排序,但在一般情况下比冒泡排序快得多,而且他和冒泡排序刚好相反,冒泡是你有序了我是最快的,而快速排序是你有序了,我是最慢的,你越乱,我越快,所以这种奇葩排序方法的原理到底是什么呢?

我做一篇博客,总结一下这个方法。

快速排序的原理说起来很简单,就是在一组数列中,随机找一个基准数,比基准数大的,放后边,比基准数小的,放前面,这样就完成了一次快速排序,然后递归调用这个算法,就变成了快速排序。

听着很简单吧,那我们就来动手试试;

这有一组随机数组:

6  1  3  5  8  7  4  2  9  10

假如我们选择6作为基准数,那么一次快排之后,数组变成什么样了呢?

这个问题啊大家先思考,我这里把一次快排的代码写出来,在最下面可以看到答案,看看大家想的正不正确。

int QuickSort(int *arr,int left,int right)
{
	if(arr == NULL || left < 0 || right > length || left > right)
    {
	return -1;
    }
    int key = arr[left];
    int i = left;
    int j = right;
    while(i < j)
    {
	    while(i < j && arr[j] >= key)
	    {
	    	j--;
        }
        if(i < j)
        {
	        arr[i] = arr[j];
	        i++;
        }
        while(i<j && arr[i] < key)
        {
	        i++;
        }
        if(i<j)
        {
	        arr[j] = arr[i];
	        j--;
        }
    }

    arr[i] = key;
    return i;
}

快排的解法不唯一,我记得我还看到一个使用交换函数的,每次从两边走,把左边比基准大的和右边基准小的进行交换,这样的算法更快一点,无论哪种方法都可以,最好只记一种方法,两种方法都记的话,不利于初期的理解和书写代码。

 

 

那么回到最初的问题,一次排序过后数组变成了什么样呢?

如下所示:

2  1  3  5  4  6  7  8  9  10

欢迎大家交流~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值