相关知识
1. 稳定排序和非稳定排序:
稳定排序算法会按照相等的关键(换言之就是值)维持纪录的相对次序。
假设排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的列表中R出如今S之前,在排序过的列表中R也将会是在S之前。

2. 内排序和外排序
在排序过程中,全部须要排序的数都在内存。并在内存中调整它们的存储顺序。称为内排序。
在排序过程中,仅仅有部分数被调入内存,并借助内存调整数在外存中的存放顺序排序方法称为外排序。
3.算法分类
排序算法从理论上分为例如以下几类:
(1) 交换排序法: 冒泡排序高速排序
(2) 选择排序法: 选择排序堆排序、循环排序等
(3) 插入排序法: 插入排序希尔排序、二叉查找树排序等
(4) 归并排序法: 归并排序、Strand排序等
(5) 分布排序法: 基数排序、桶排序、计数排序等。
(6) 混合排序法: 反移排序、Tim排序等
以下主要针对常见的排序算法进行分析

一:冒泡排序
算法思想:两两比較待排序记录的keyword,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
                    能够分为“大数沉底法”和“小数上浮法”两种不同的形式。

时间复杂度:O(n^2)
稳定性:        稳定排序
算法实现:
(1)大数沉底法

void bubble_sort(int array[], int n)
{int i, j, temp;for(i = 0; i < n-1; i++){for(j = 0; j < n -i; j++){if(array[j] > array[j+1]){temp = array[j];array[j] = array[j+1];array[j+1] = temp;}}}
}

(2)小数上浮法

void bubble_sort(int array[], int n)
{int i, j, temp;for(i = 0; i < n-1; i++){for(j = n - 1; j > i; j--){if(array[j] < array[j-1]){temp = array[j];array[j] = array[j-1];array[j-1] = temp;}}}
}

(3)改进算法

若在某一趟排序中未发现有位置的交换。则说明待排序的无序区均满足轻者在上,重者在下的原则,因此。冒泡排序过程可在此趟排序后终止。

因此,改进的算法中,引入一个布尔量exchange。在每趟排序開始前。先将其置为0。若排序过程中发生了交换,则将其置为1。

各趟排序结束时检查exchange,若未曾发生过交换则终止算法,不再进行下一趟排序。

//array[0 .. n-1]是待排序的文件,採用自上向下扫描。对array做冒泡排序
void bubble_sort(int array[], int n)
{ int i, j, temp;int exchange = 0; //交换标志for(i = 0; i < n-1; i++) //最多做n-1趟排序{exchange = 0; //本趟排序開始前,交换标志应为假for(j = 0; j < n - i; j++) //对当前无序区array[0 .. n-i]自上向下扫描{if(array[j] > array[j+1]){temp = array[j];array[j] = array[j+1];array[j+1] = temp;exchange = 1;  //发生了交换。故将交换标志置为真}}if(!exchange) //本趟排序未发生交换。提前终止算法return;}
} 

二:高速排序
算法思想:通过一趟排序将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序。整个排序过程能够递归进行,以此达到整个数据变成有序序列。
时间复杂度:O(nlog2n)
稳定性:        不稳定排序
算法实现:

void quick_sort(int s[], int low, int high)
{if (low < high){int i = low, j = high, x = s[low];while (i < j){while(i < j && s[j] >= x) // 从右向左找第一个小于x的数j--;  if(i < j) s[i++] = s[j];while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数i++;  if(i < j) s[j--] = s[i];}s[i] = x;  /*一遍扫描完后,放到适当位置*/  quick_sort(s, low, i - 1);  /*对基准点左边的数再运行高速排序*/  quick_sort(s, i + 1, high); /*对基准点右边的数再运行高速排序*/  }
}

转载于:https://www.cnblogs.com/jzssuanfa/p/6928414.html

经常使用排序算法实现[交换排序之冒泡排序、高速排序]相关推荐

  1. 排序算法之交换排序(冒泡排序、快速排序)

    交换排序(冒泡排序.快速排序) 交换排序 冒泡排序 概念 算法实现 快速排序 概念 算法实现 后续 交换排序 所谓交换,是指根据序列中两个关键字的比较结果来对换这两个记录在排序中的位置. 冒泡排序 概 ...

  2. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  3. 十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 ...

  4. 数据结构:排序算法之交换排序(冒泡排序、快速排序)

    1.冒泡 void bubbleSort(int a[], int n){for(int i =0 ; i< n-1; ++i) {for(int j = 0; j < n-i-1; ++ ...

  5. 8)排序①排序算法之交换排序[1]冒泡排序法

    1 #include "iostream" 2 using namespace std; 3 4 //************冒泡排序法********* 5 int bubble ...

  6. 【排序算法系列 1】冒泡排序(Bubble Sort)

    [排序算法系列 1]冒泡排序 [排序算法系列 2]选择排序 [排序算法系列 3] 插入排序 [排序算法系列 4] 高级排序--希尔排序(插入排序的改进) [排序算法系列 5] 高级排序--归并排序 [ ...

  7. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...

  8. 经典排序算法(1)——冒泡排序算法详解

    冒泡排序是一种交换排序. 什么是交换排序呢? 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止. 一.算法基本思想 (1)基本思想 冒泡排序的基本思想就是: ...

  9. JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)

    JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...

最新文章

  1. 利用mask在PhotoShop完成渐变的图片。
  2. Linux创建线程读取双口数据,linux环境下读写一次双口ram尽然要十几个毫秒。(附驱动代码)...
  3. 计算机类期刊的影响因子
  4. C++STL的set/ multiset容器
  5. Tesla P4测试
  6. ros发布节点信息python_ROS入门笔记(一): ROS简介
  7. Hadoop常见端口总结
  8. VMware ESX的性能如何与Hyper-V的价格进行竞争?
  9. Java和jsp编程中应该注意的几个常见问题
  10. 纯php员工管理,php企业员工信息管理系统
  11. centos安装tree命令
  12. win10 1903 专业版 CreateProcessAsUser
  13. 【技巧】如何给CSDN上的每篇原创文章添加版权声明
  14. 政府采购和招标投标常见问题:评标的依据是什么?
  15. 互联网最值得加入的 173 家国企汇总!!
  16. 【浅谈电商】如何防止重复支付
  17. 经典的期货量化交易策略大全(含源代码)
  18. MYSQL super_read_only 到底有没有必要存在
  19. uni-app/js/小程序/生成支付二维码图片,类似于支付宝和微信商家码
  20. OCR识别软件(uTools)→{个人笔记记录}

热门文章

  1. python在线课程价格-杭州python课程价格
  2. python使用教程pandas-python使用pandas处理excel的方法
  3. php和python哪个用了开发web好-web开发选择Python还是PHP好呢?
  4. python编程语言能干什么-python编程语言的优势与劣势--python能干啥
  5. python开发是做什么的-python开发工程师是做什么的
  6. 零基础可以学python吗-零基础适合学习python吗?
  7. python读什么英文-django的英文读法是什么
  8. 2018python培训-2018python深度学习核心技术培训班
  9. python第三方库是什么意思-Python最强大的第三方库,你有必要了解一下!
  10. pythonurllib模块-python模块之urllib