介绍两种交换排序:冒泡和交换

冒泡排序算法的原理如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序的时间复杂度为

,并且是一种稳定的排序。
public static void bubbleSort(int[] numbers){int temp = 0;int size = numbers.length;for(int i = 0 ; i < size-1; i ++){for(int j = 0 ;j < size-1-i ; j++){if(numbers[j] > numbers[j+1])  //交换两数位置{temp = numbers[j];numbers[j] = numbers[j+1];numbers[j+1] = temp;}}}}

交换排序:快速排序由C. A. R. Hoare在1962年提出的一种划分交换排序。它采用了一种分治的策略通常称为分治法。分治法的基本思想是将原问题分解为若干个规模更小的但结构与原问题相似的子问题,然后递归的解决这些子问题,之后将子问题的解组合为原问题的解。因此在用递归描述的分治算法的每一层递归上,都有以上三个步骤。

快速排序的主要步骤如下:

1) 设置两个变量i、j,排序开始的时候:i=0,j=n-1;

2)第一个数组值作为比较值,首先保存到temp中,即temp=A[0];

3)然后j-- ,向前搜索,找到小于temp后,因为s[i]的值保存在temp中,所以直接赋值,s[i]=s[j]

4)然后i++,向后搜索,找到大于temp后,因为s[j]的值保存在第2步的s[i]中,所以直接赋值,s[j]=s[i],然后j--,避免死循环

5)重复第3、4步,直到i=j,最后将temp值返回s[i]中

6) 然后采用“二分”的思想,以i为分界线,拆分成两个数组 s[0,i-1]、s[i+1,n-1]又开始排序。

public static int getMiddle(int[] list, int low, int high){int tmp = list[low];//数组的第一个作为中轴while (low < high){while (low < high && list[high] >= tmp){high--;}list[low] = list[high];//比中轴小的记录移到低端while (low < high && list[low] <= tmp){low++;}list[high] = list[low];//比中轴大的记录移到高端}list[low] = tmp;//中轴记录到尾return low;//返回中轴的位置}
public static void _quickSort(int[] list, int low, int high){if (low < high){int middle = getMiddle(list, low, high);//将list数组进行一分为二_quickSort(list, low, middle - 1);//对低字表进行递归排序_quickSort(list, middle + 1, high);//对高字表进行递归排序}
}

c++ list排序_排序(二)交换排序相关推荐

  1. java通过比较大小排序_排序算法的比较与java实现

    冒泡排序 基本思想: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上 ...

  2. 降序排序_排序简单,应用不易,使用Excel排序的几点建议

    对数据排序,是数据分析中最基本.最常用也是最重要的分析方法.Excel提供了丰富.简单.灵活的排序方法和排序方式,包括单个排序.组合排序等.对于学习者短时间内掌握Excel的排序,难度不大.问题可能更 ...

  3. 倒序排序_排序不等式,切比雪夫不等式及伯努利不等式

    我们比较熟悉的不等式可能就是下面的这个不等式链以及柯西不等式了: 对于不等式链的证明我们可以看下面这张图,非常直观形象: 不太懂得也可以看这个视频讲解: 知乎视频​www.zhihu.com 对于柯西 ...

  4. python集合排序_排序算法集合

    #### 冒泡排序 ### 时间复杂度是: O(n^2) ### 空间复杂度是: O(1) def BubbleSort(li): for i in range(len(li)): # i = 0 f ...

  5. 倒序排序_排序算法(六):Counting Sort 计数排序

    之前文章介绍的一些排序算法都是基于比较来进行排序的,故它们在平均情况下的时间复杂度最好也不过是线性对数级别.这里我们来介绍一种简单的基于非比较的排序算法--Counting Sort 计数排序,其时间 ...

  6. 程序填充(指针):3数排序_排序算法之快速排序,它为什么这么快?

    本文将介绍排序算法中最常用,以及最重要的快速排序. 1 快速排序实例 快速排序由C. A. R. Hoare在1960年提出,是冒泡排序的一种改进.快速排序就跟它的名字一样,效率很快.跟冒泡排序,选择 ...

  7. ds排序--希尔排序_排序算法 - 希尔排序分析及优化

    希尔排序 1 算法思想 希尔排序,也被称为递减增量排序,是简单插入排序的一种改进版本. 在插入排序中,如果待排序列中的某个元素,距离有序数列中待插入位置非常远,就需要比较很多次才可以到达插入位置,这是 ...

  8. python3 lambda函数字典排序_排序字典表理解中的lambda函数

    我有以下词典:student_loan_portfolio = { 'loan1': {'rate': .078, 'balance': 1000, 'payment': 100, 'prepayme ...

  9. 冒泡和快速排序的时间复杂度_排序算法学习分享(二)交换排序---冒泡排序与快速排序...

    排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...

最新文章

  1. Libnids库-网络入侵检测的基础框架
  2. SQLite 附加数据库(http://www.w3cschool.cc/sqlite/sqlite-attach-database.html)
  3. 未来已来,音视频江湖再起波澜
  4. android权限申请方法,安卓开发Android6+权限申请管理用户拒绝权限一键解决方案...
  5. itsdangerous
  6. 0507Python基础-set-深浅copy
  7. Swift 再等等?我的答案是:快上车
  8. 联想小新触摸板驱动_联想小新潮触摸板驱动_联想小新潮5000电脑触摸板驱动下载 v1.57 稳定版-126g驱动网...
  9. 一招教你解决“删除:需要管理员权限才能删除的文件夹”
  10. netbeans使用教程_IDE:5个最喜欢的NetBeans功能
  11. 高级PHP工程师所应该具备的一些技能
  12. 无法唤起订阅消息弹窗 requestSubscribeMessage:fail can only be invoked by user TAP gesture
  13. 黑苹果2k显示器开启hidpi_黑苹果开启硬件加速
  14. Meta-RL之Optimization as a Model for Few-Shot Learning
  15. Excel从身份证号提取生日
  16. 如何将项目部署到服务器:从选择服务器到维护应用程序的全流程指南
  17. 牛逼!程序员给鸿星尔克写了一个720°全景看鞋展厅
  18. 它听键盘声就知道你敲的是什么——GitHub 热点速览 Vol.51
  19. 汇率转换(HTML+CSS+JS 附源码)
  20. VC++编写远程控制软件

热门文章

  1. C++获取CPU信息应用经验分享
  2. Apache-ab 接口性能测试
  3. 调车遇到的问题及解决办法
  4. linux下编程epoll实现将GPS定位信息上报到服务器
  5. 20165203《Java程序设计》第四周学习总结
  6. NetCore 2.0 + Swagger 的WebAPI 模板例子
  7. 使用sharepoint自带的文本编辑器2
  8. 大数据之-Hadoop3.x_MapReduce_切片源码分析---大数据之hadoop3.x工作笔记0104
  9. ES6新特性_ES6集合实践---JavaScript_ECMAScript_ES6-ES11新特性工作笔记031
  10. Netty工作笔记0011---Channel应用案例2