十大排序算法之冒泡排序、快速排序的介绍

这篇具有很好参考价值的文章主要介绍了十大排序算法之冒泡排序、快速排序的介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

个人主页:平行线也会相交
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【数据结构初阶(C实现)】
十大排序算法之冒泡排序、快速排序的介绍

冒泡排序

说起来冒泡排序,是我们接触到的最早的一个排序算法了,这次就当进行一个巩固提升了。冒泡排序还被称为交换排序
冒泡排序:

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

下面是冒泡排序的动态图:

十大排序算法之冒泡排序、快速排序的介绍
冒泡排序特点:

1.时间复杂度:O(N^2)
2.空间复杂度:O(1).
3.稳定性:稳定。

冒泡排序代码

void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n - 1; j++)
	{
		for (int i = 1; i < n - j; i++)
		{
			if (a[i - 1] > a[i])
				Swap(&a[i - 1], &a[i]);
		}
	}
}

运行结果如下:
十大排序算法之冒泡排序、快速排序的介绍

冒泡排序优化

我们知道冒泡排序的时间复杂度最坏情况是O(N^2),最好情况依然是O(N^2)。所以我们对其进行一个优化:

void BubbleSort(int* a, int n)
{
	for (int j = 0; j < n - 1; j++)
	{
		bool exchange = false;
		for (int i = 1; i < n - j; i++)
		{
			if (a[i - 1] > a[i])
			{
				Swap(&a[i - 1], &a[i]);
			}
			exchange = true;
		}
		if (exchange == false)
			break;
	}
}

如果我们冒泡完一趟以后,发现数组有序(即一次交换都没有发生),那么我们直接推出循环即可完成排序。
上面改进的冒泡排序最好的情况的时间复杂度是O(N)

十大排序算法之冒泡排序、快速排序的介绍

快速排序

快速排序使用的是分治策略一个序列分为两个子序列。我们现在序列中选取一个元素作为基准值(或者称为关键值key),然后重新排序这个序列,如果是升序的话,所有比基准值大的元素放到基准值的右边,所有比基准值大的元素放在基准值的左边,经过此分区结束之后,然后对左右子序列重复此过程,直到所有元素出现在相对应的位置上。
其实简单来说就是选出一个基准值(一般选最左边或者最右边的),把这个基准值放到它所对应的位置上去。

下面是快速排序的动态图:
十大排序算法之冒泡排序、快速排序的介绍
上图就是选取最左边的5作为基准值,然后比5大的元素放到5的右边,比5小的元素放到5的左边。最终5就会出现在其所对应的位置上。
举个例子:
现在我们来对数组{6,1,2,7,9,3,4,5,10,8}来进行排序。请看图解:

十大排序算法之冒泡排序、快速排序的介绍
经过一次单趟排序后,上图中的6已经处于其对应的位置了,所以对于快速排序的单趟排序中,本质也是把一个元素排好
十大排序算法之冒泡排序、快速排序的介绍

快速排序代码

QuickSort(int* a, int left, int right)
{
	if (left >= right)
		return;
	int begin = left, end = right;

	int keyi = left;
	while (left < right)
	{
		//右边找小
		while (left < right && a[right] >= a[keyi])
		{
			right--;
		}

		//左边找大
		while (left < right && a[left] <= a[keyi])
		{
			left++;
		}
		Swap(&a[left], &a[right]);
	}
	Swap(&a[left], &a[keyi]);
	keyi = left;

	//接下来进行递归
	//[begin , keyi - 1]  keyi  [keyi + 1 , end]   
	QuickSort(a, begin, keyi - 1);
	QuickSort(a, keyi + 1, end);
}

运行结果如下:
十大排序算法之冒泡排序、快速排序的介绍文章来源地址https://www.toymoban.com/news/detail-467314.html

到了这里,关于十大排序算法之冒泡排序、快速排序的介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 十大排序算法(冒泡排序、插入排序、选择排序、希尔排序、堆排序、快排、归并排序、桶排序、计数排序、基数排序)

    目录 一、冒泡排序: 二、插入排序: 三、选择排序: 四、希尔排序: 五、堆排序: 六、快速排序: 6.1挖坑法: 6.2左右指针法 6.3前后指针法: 七、归并排序: 八、桶排序: 九、计数排序: 9.1绝对映射: 9.2现对映射: 十、基数排序:  1、思路: 通过对待排序序列从前

    2024年03月11日
    浏览(56)
  • 【Python排序算法】一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、希尔排序和堆排序

    目录 1 冒泡排序(Bubble Sort) 2 插入排序(Insertion Sort) 3 选择排序(Selection Sort) 4. 快速排序(Quick Sort) 5. 归并排序(Merge Sort) 6 堆排序 (Heap Sort) 7 计数排序 (Counting Sort) 8 基数排序 (Radix Sort) 9 希尔排序(Shell Sort) 10 桶排序     1 冒泡排序(Bubble Sort)        冒泡排序

    2024年02月08日
    浏览(55)
  • 【数据结构与算法】十大经典排序算法-快速排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌞 知乎 :HelloCode 🌴 掘金 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 快速排序(Quick Sort)是一种高效的排序算法,是对冒泡排序的优化。它采用分治法(Divide and Conquer)的思想,将待排序序列

    2024年02月13日
    浏览(65)
  • 【排序算法(三)】交换排序(冒泡排序&&快速排序)

    ​ ​📝个人主页:@Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯 长路漫漫浩浩,万事皆有期待 上一篇博客:【排序算法(二)】选择排序(直接选择排序堆排序) 冒泡排序属于交换排序,所谓 交换排序 就是就是根据序列中两个记录

    2023年04月22日
    浏览(44)
  • 排序算法1:冒泡排序、快速排序、插入排序

    排序算法:交换类排序,插入类排序、选择类排序、归并类排序 交换类排序:冒泡排序、快速排序 一、冒泡排序  时间复杂度:内层是ji,外层是从0到n-1,运行的总次数是1+2+3+4+...+n-1,即O() 空间复杂度:O(1),没有使用额外空间,不会因为n的变化而变化 如果数组本身有序,最

    2024年02月21日
    浏览(46)
  • 排序算法乱炖: 快速排序、归并排序、冒泡排序

    1. 快速排序原地版 最好情况的时间复杂度 :O(nlogn),logn为递归的层数,n为每层递归中总的时间复杂度。 最差情况的时间复杂度 :O(n*n) 2. 快速排序空间换时间版 最好情况的时间复杂度 :低于O(nlogn) 思想 :分治。分而治之 ,递归的把数据一分为二,直到数组中只有一个元素

    2024年02月11日
    浏览(48)
  • C/C++排序算法(三)—— 冒泡排序和快速排序

    本篇文章将带领大家学习 冒泡排序 和 快速排序 ,它俩都属于交换排序。 冒泡排序的英文 Bubble Sort ,是一种最基础的 交换排序 。 大家一定都喝过汽水,汽水中常常有许多小小的气泡,哗啦哗啦飘到上面来。这是因为组成小气泡的二氧化碳比水要轻,所以小气泡可以一点一

    2024年02月03日
    浏览(41)
  • 快速了解四种排序算法:希尔排序,堆排序,快速排序,冒泡排序(c语言)

     一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。 1.1算法(algorithm ) 是指令的集合,是为解决特定问题而规定的一系列操作。 它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据

    2024年02月16日
    浏览(50)
  • 算法__数组排序_冒泡排序&直接选择排序&快速排序

    本篇主要讲解数组排序相关的三种算法,冒泡排序,直接排序和快速排序。 在数组中依次比较相邻的两个元素,当满足左侧大于右侧时(升序排序),则两个位置的元素互换。如此重复,最终即可完成数组的排序。 依次找出数组中最小值的索引,并和数组左侧的元素进行位

    2024年02月07日
    浏览(54)
  • 【数据结构】排序算法(二)—>冒泡排序、快速排序、归并排序、计数排序

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.冒泡排序 2.快速排序 2.1Hoare版 2.2占坑版 2.3前后指针版 2.4三数取中对快速排序的优化 2.5非递归版 3.归

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包