排序算法之交换排序(冒泡排序、快速排序)
交换排序(冒泡排序、快速排序)
- 交换排序
- 冒泡排序
- 概念
- 算法实现
- 快速排序
- 概念
- 算法实现
- 后续
交换排序
所谓交换,是指根据序列中两个关键字的比较结果来对换这两个记录在排序中的位置。
冒泡排序
概念
冒泡排序的基本思想是:从前往后(或从后往前)两两比较相邻元素的值,若为逆序(即A[I-1]>A[I]),则交换它们,直到序列比较完。我们称它为第一趟冒泡,结果是将最小的元素交换到待排序列的第一个位置(或将最大的元素交换到待排序列的最后一个位置),关键字最小的元素如气泡一样逐渐向上“漂浮”。最终一个一个排好了位置。
算法实现
void Bubble_Sort(ElemType A[],int n)
{//冒泡排序int i, j;bool flag;for (i = 0; i < n; i++){flag = false;for (j = n - j; j > 0; j++){if (A[i - 1] > A[i]){swap(A[i-1],A[i]);flag = true;}}if (flag == false)return;}}
快速排序
概念
快速排序的基本思想是基于分治法的:在待排序表L【1.。。n】中任取一个元素pivot作为枢轴(通常取首元素),通过一趟排序将待排序表划分为独立的两部分,使其中一个表L【1.。。k-1】中的元素都大于枢轴pivot,另一个表L【k+1.。。。n】中的元素都小于枢轴pivot,则将枢轴pivot放在了其最终位置L【k】上,这个过程称为一趟快速排序(或一次划分)。然后分别递归地对两个子表重复上述过程。
算法实现
void Quick_sort(ElemType A[], int low, int high)
{//快速排序if (low < high){int pivotpos = partition(A,low,high);//分割Quick_sort(A,low,pivotpos-1);//左子表递归Quick_sort(A,pivotpos+1,high);//右子表递归}
}
int partition(ElemType A[],int low,int high)
{//快速排序一次划分ElemType pivot = A[low];//以表中的第一个元素为枢轴while (low<high){while (low < high && A[high] >= pivot)--high;A[low] = A[high];while (low < high && A[low] <= pivot)++low;A[high] = A[low];}A[low] = pivot;//枢轴元素放在最终位置return low;//返回存放枢轴的最终位置
}
后续
如果想了解更多物联网、智能家居项目知识,可以关注我的程序设计专栏。
订阅专栏后,可以在微信公众号上私聊我,直接发给你源码。
或者关注公众号。
编写不易,感谢支持。
排序算法之交换排序(冒泡排序、快速排序)相关推荐
- 排序算法:归并排序、快速排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...
- Java十大排序算法总结,Java排序算法总结之冒泡排序
本文实例讲述了Java排序算法总结之冒泡排序.分享给大家供大家参考.具体分析如下: 前言:冒泡排序(BubbleSort)就是依次比较相邻的两个数,将小数放在前面,大数放在后面. 下面让我们一起 ...
- js排序算法详解-冒泡排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-冒泡排序 1.1 原始人冒泡排序 function bubbleSort(arr) {var len = ar ...
- 经常使用排序算法实现[交换排序之冒泡排序、高速排序]
相关知识 1. 稳定排序和非稳定排序: 稳定排序算法会按照相等的关键(换言之就是值)维持纪录的相对次序. 假设排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的列表中R出如今S之前,在排 ...
- php递归实现冒泡排序,排序算法之PHP版快速排序、冒泡排序
一.快速排序 1.简介 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序 ...
- 经典排序算法(2)——快速排序算法详解
快速排序(Quick Sort)也是一种典型的交换排序算法,通过交换数据元素的位置进行排序. 一.算法基本思想 (1)基本思想 快速排序的基本思想就是:通过一趟排序将要排序的数据分割成独立的两部分,其 ...
- 【排序算法】交换排序(C++实现)
所谓交换,就是根据序列中两个记录值的比较结果来对换这两个记录在序列中的位置.交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动.常见的交换排序有冒泡排序(Bubble ...
- [ 数据结构 -- 手撕排序算法第二篇 ] 冒泡排序
手撕排序算法系列之:冒泡排序. 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等. 大家可以点击此链接阅读其他排序算法:排序算 ...
- 排序算法中——归并排序和快速排序
冒泡排序.插入排序.选择排序这三种算法的时间复杂度都为 $O(n^2)$,只适合小规模的数据.今天,我们来认识两种时间复杂度为 $O(nlogn)$ 的排序算法--归并排序(Merge Sort)和快 ...
最新文章
- Xamarin.FormsShell基础教程(6)Shell项目内容详情页面
- Java日期格式化SimpleDateFormat
- 交通灯程序设计C语言,基于MCS-51的交通灯程序设计(c语言控制直行左转,包含程序)...
- SAP算号器 license key Developer Access Key 完美解决方案
- clistctrl获取选中行数据_大神,Excel数据怎么对比?
- java程序设计_Java程序设计--final(笔记)
- 2021 年电工杯 A 题(第一题、第二题、第四题)
- 手机怎么用外嵌字幕_图片上添加字幕用手机怎么操作?
- python调用qq互联_实现QQ互联一键登录代码教程
- 2022最新显卡天梯图,2022显卡天梯排行榜
- python交集和补集的符号_python数组并集交集补集
- 苏州旅游骗局黑幕经历
- 关于win7快速启动栏以及显示桌面功能的还原
- 苹果充电显示不支持此配件_水果手机充电时,显示不支持此配件时的应急处理小窍门...
- 第七章 在51单片机上移植uc/os-2
- 时间格式转换,转时间戳,转UTC,转中国标准时间
- 密钥对和AccessKey
- Scale-Equalizing Pyramid Convolution for Object Detection论文阅读
- 机器学习 (一) 基础概念
- 2019-9-2-程序员壁纸
热门文章
- [THUWC2017] 在美妙的数学王国畅游
- HTML的SEO(搜索引擎优化)标准
- vim系统配置文件,配置专属自己的环境
- 国家集训队2011 happiness
- mvn 命令向本地仓库上传 jar
- 在减少对内地房地产投资的同时,加快了在内地零售业的布局;并积极推动“走出去”战略,在全球52个国家投资多种业务。...
- 《BI那点儿事》数据挖掘初探
- win32api window2con 模块 -系统注册表操作
- Project Server 2010 好难装阿!
- Android 透明动画实现 详细概述