Quick_sort快速排序

Posted 超浪*牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quick_sort快速排序相关的知识,希望对你有一定的参考价值。

快速排序(交换排序)

按照之前学过的冒泡排序,我们知道它的时间复杂度达到了O(n的2次方);那如果是对1亿个数字进行排序,则这个冒泡排序法需要1千万秒,达到115天之久,那么有没有更加快一点的排序呢?那就先来了解一下这个与冒泡类似的交换排序吧!

  • 假设现在对“6、1、2、7、9、3、4、5、10、8”这10个数字排序。
  • 首先在这个序列中找到一个数作为基准数可不要被这个名词吓到,这就是用来参照的一个数,待会呢,你就知道它是用来干嘛的了

首先我们需要在数列中选择一个基准数,我们一般会选择中间的一个数或者头尾的数,这里直接选择第 1 个数 6 作为基准数,接着把比 6 小的数字移动到左边,把比 6大的数字移动到右边,对于相等的数字不做移动。

在这里插入图片描述

快速排序的操作是这样的:从数据的两端开始探测,首先从数列的右边开始往左边找到一个小于6的数,再从右往左找一个大于6的数然后交换他们(切记一定先是从右往左找)直到二者相遇时,回归基数。在这里插入图片描述
代码描述如下:

/***********************************************************
*版权所有:(C) 2021.6.10  烽火编程(第八方面军) 
* 
*文件名称:quick_sotr 
*内容摘要:排序算法 
*当前版本:1——1 
*文件作者:牛鹏 
*完成日期:2021.6.10
*
*修改记录:暂无 
***********************************************************/
#include <stdio.h>
#include <stdlib.h>
int Quick_Sort(int a[],int left,int right){
	int i,j,t,temp;
	if(left>right){
		return;
	}
	temp = a[left];//temp存放的就是基准数 
	i = left;
	j = right;
	while(i!=j){
		//顺序很重要,要先从右往左找,(找小) 
		while(a[j]>=temp && i<j){
			j--;
		}
		//在从左往右找,(找大) 
		while(a[i]<=temp && i<j){
			i++;
		}
		//在两个下标未遇之前,交换两个数在数组中的位置  
		if(i<j){
			t = a[i];
			a[i] = a[j];
			a[j] = t; 
		} 
	}
	//最终将基数归位
	a[left] = a[i];
	a[i] = temp;
	Quick_Sort(a,left,i-1);//继续处理左边部分 ,递归过程 
	Quick_Sort(a,i+1,right);//继续处理右边部分,递归过程 
} 
int main() {
	int a[] = {6,1,2,7,9,3,4,5,10,8};
	int i;
	for(i=0;i<10;i++){
		printf("%d ",a[i]);
	}
	Quick_Sort(a,0,9);
	printf("\\n排序后↓:\\n"); 
	for(i=0;i<10;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

以上是关于Quick_sort快速排序的主要内容,如果未能解决你的问题,请参考以下文章

快速排序

Python一行快速排序

python 快速排序

使用python实现快速排序

快速排序的python实现

十分钟记住快速排序(快速排序快速记忆方法)