简单排序

内部排序 和外部排序 内部排序 就是 假如 你有2GB的内存 刚好 有 2GB以下的 数据需要排序 这样刚好就 将全部的数据 储存到 内存当中 进行了排序  这就是内部排序  与之相反的 外部排序就是   你有1TB的 数据需要排序但是 你有 2GB的内存 这时候  内存 不能盛下  数据 就需要 开始外部排序了.    

稳定排序  和不稳定排序  任意两个相等的数据 在  排序前后的相对位置不发生变化.   (这个  比较容易实现)

    没有任何一种  排序在任何情况下  都是 最优的.

所以说  存在  就必定有它存在的必然性   在课本里面的东西   只要有  就应该 好好的学习  .

冒泡排序 .这个就很简单了  大家应该都会 .  直接附上代码

冒泡虽然很垃圾,但是冒泡有两个有点

1:  可以对 链表进行排序(快速排序  好像也可以).

2:  可以手动控制稳定性 (快速排序  好像也可以).

(小问题 如果有7个数字  则最多 需要比较几次? ) -------------21  why?  如何计算?

//核心思想就是   每一次 都找一个最大的 然后以此交换 知道将最大的放到最后面  第二次将第二大的 放到 倒数第二的位置      一次进行  n次 这样的操作.//稳定性的话     就是看你   需要交换的  条件  如果 不是 大于或等于  或者是  小于或等于   就是稳定的   只要 相等也交换 就是  不稳定的排序.void Bubble_Sort( ElementType A[], int N )
{ for ( P=N-1; P>=0; P-- )
{flag = 0;for( i=0; i<P; i++ ){ /* 泡 一趟冒泡 */if ( A[i] > A[i+1] ){Swap(A[i], A[i+1]);flag = 1; /* 换 标识发生了交换 */}}if ( flag==0 ) break; /* 换 全程无交换 */
}
} //最好情况:顺序 T = O( N )//最坏情况:逆序 T = O( N 2 )

插入排序:  就是咱们 打牌的时候  插牌的思想.

1:程序短  但是插入排序最重要的存在原因就是啥呢?    后面补充

2:插入排序稳定.

#include <stdio.h>
#include<algorithm>
#include <string.h>
using namespace std;
int main()
{int p,i,j,a[10]={2,5,8,9,6,3,1,4,7,0},temp;for(p=1;p<10;p++)                             //  从原先的 数组里面  一次选出来一个数字
   {temp=a[p];                             //赋值给 temp for(i=p;i>0&&a[i-1]>temp;i--)     //开始  倒着检查  并且将 大于该牌的牌一次后移一位 直到  刚才选出来的牌  小于 那一张扑克 .(  手里面扑克总量 是  P)
       {a[i]=a[i-1];}a[i]=temp;            //小于了 那么就插入吧  ,刚好刚才还腾出来了 一个 空位.
   }for(i=0;i<10;i++)printf("%d",a[i]);
}

----------------------排序的 思想是什么?-----------------

时间复杂度下界

 对于下标 i<j ,如果A[i]>A[j] , 则称(i,j)是一对逆序对(inversion)

 逆序对的计算

问题:序列{34, 8, 64, 51, 32, 21} 中有多少逆序对?   9对
(34, 8) (34, 32) (34, 21) (64, 51) (64, 32) (64, 21) (51, 32) (51, 21) (32, 21)

所以   排序的 的si

交换2 个相邻元素正好消去1 个逆序对!  所以  冒泡 和插入 在这一个 数组里面  都需要交换9次.

插入排序:T(N, I) = O( N+I )
— 如果序列 基本有序

思考!!!!!!!!!!

定理:任意N个不同的元素组成的序列平均具有N(N-1)/4 个 逆序对   (平均哦)定理:任何仅以交换相邻两元素来排序的算法,其平均时间复杂度为  N^2

---------------------有没有 灵光乍现?------------------------

意思就是 我们想提高算法的效率 我们可以从  每次交换 消去尽可能多的 逆序对.

-----------------------怎么实现呢?---------------------------------

我们可以 交换 相邻较远的 逆序对(注意观察 上面的  9个 逆序对)  这样一次交换就可以消去  多个 逆序对.

--------简单排序到此为止  下面 就去 实现 一次交换 消去  N个 逆序对.-----------

转载于:https://www.cnblogs.com/A-FM/p/5158047.html

-----------简单排序-------------相关推荐

  1. HDU1040简单排序题

    简单排序直接上代码:总共使用了九种方法解决这道题 方法一: #include<iostream> #include<algorithm> #include<cmath&g ...

  2. 算法:三种简单排序算法

    排序算法比較常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和高速排序算法等. 今天先学习一下前面三种比較简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等.排 ...

  3. C#实现(递归和非递归)快速排序和简单排序

    C#实现(递归和非递归)快速排序和简单排序 本人因为最近工作用到了一些排序算法,就把几个简单的排序算法,想冒泡排序,选择排序,插入排序,奇偶排序和快速排序等整理了出来,代码用C#代码实现,并且通过了测 ...

  4. [MIPS汇编语言]简单排序实现

    排序是程序语言的基础操作 通过排序练习可以提高对语言的掌握程度 汇编是可以说是最底层的语言了,学习汇编,可以提高对几乎所有语言的理解程度.(个人看法) 下面展示了用MIPS汇编语言实现的简单排序 (对 ...

  5. 数据结构 排序【简单排序(冒泡、插入)、希尔排序、堆排序、排序方法的综合比较、2套 排序汇总代码】

    目   录 第9章 排序(上) 9.1 简单排序(冒泡.插入) 1.前提 2.简单排序(冒泡排序) 3.简单排序(插入排序) 4.时间复杂度下界 9.2 希尔排序 9.3 堆排序 排序方法综合比较 排 ...

  6. C++简单排序,堆排序

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105009824 简 ...

  7. iOS程序员也要学点算法吧 简单排序之插入排序

    进入到简单排序的第三个排序,插入排序.其实插入排序,和冒泡,还有选择排序都是比较排序算法的一种,比较效率基本也是O(N²) 但是插入排序,效率基本比冒泡快一倍,选择快一点. 有一个已经有序的数据序列, ...

  8. C 双向链表的简单排序实现

    今天偶尔看到了C结构体的单项链表. 于是重新温习了下双向链表,重写了下双向链表的简单排序实现,当做温习总结吧. 先定义双向链表 1 struct Student{ 2 int studentId; 3 ...

  9. python sort 部分元素_Python 简单排序算法-选择、冒泡、插入排序实现

    写文章主要是记录自己每天学习的东西,本篇文章主要介绍数据结构中常用的简单的排序算法,虽然这些算法用Python实现起来不是十分的高效,不如c.java之类的运行速度快,应用Python实现主要是为了: ...

  10. 简单排序算法(Java实现)

    简单排序算法:冒泡排序,选择排序,插入排序 一.冒泡排序 1.1 原理: 从第一个数据开始,与第二个数据相比较,如果第二个数据小于第一个数据,则交换两个数据的位置 指针由第一个数据移向第二个数据,第二 ...

最新文章

  1. Juniper EX3400
  2. 语言撒谎问题_孩子撒谎是高情商?四招帮家长找到孩子撒谎原因,纠正撒谎行为...
  3. Elasticsearch学习笔记1
  4. html前端如何缓存页面,Nuxt中如何做页面html缓存
  5. FastJSON、Gson和Jackson性能对比
  6. Scrapy框架学习笔记:猫眼爬虫
  7. Sturts2 三种开发模式 (转)
  8. 全网独家:LINUX登录桌面后,如何自动运行自己的应用程序
  9. ARTIF:实时威胁智能识别框架
  10. html文字旋转以后变形,CSS3中的变形处理——transform功能(旋转、缩放、倾斜、移动)...
  11. 阿里云物联网平台总结
  12. think python 第9章 case study:word play
  13. Discuz!无法连接阿里云RDS数据库代理问题的处理方案
  14. Camels and Bridge[ARC105C][二分+Dp]
  15. DCIC2021 入门数据比赛(1)
  16. 数据结构实验(C++实现):二叉树操作
  17. typeScript学习笔记day01——小肉包
  18. 基于Java开发的数据大屏展示程序
  19. 专业视频剪辑软件Final Cut Pro X Mac
  20. 调研技巧(上):以『时间旅行调试』为例

热门文章

  1. 详解TCP协议三次握手四次挥手
  2. or函数 java_Java OptionalInt orElseGet()用法及代码示例
  3. php日志文件过大,Windows服务器系统下Apache的error.log文件过大的解决办法
  4. http://mirrors.aliyuncs.com/centos/7/extras/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http:/
  5. 2021年中国硬核创业者调研报告
  6. 2021移动游戏生命周期研究玩家洞察报告
  7. 2021Q1美妆行业季度观察报告
  8. 2020年上半年美团夜宵指数发展报告
  9. 基于sentinel湿地_基于Sentinel-1A雷达影像的崇明东滩芦苇盐沼植被识别提取
  10. python 爱英斯坦台阶问题_关于Python青蛙跳台阶的问题详细讲解