博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单排序
阅读量:5311 次
发布时间:2019-06-14

本文共 2051 字,大约阅读时间需要 6 分钟。

前提:

  void X_Sort(ElementType A[], int N) 从小到大排序

  N是正整数 只讨论基于比较的排序(> = < 有定义) 只讨论内部排序

  稳定性:任意两个相等的数据,排序前后的位置不发生改变

  没有一种排序是任何情况下都表现最好的

选择排序:

  无论什么情况都需要N*(N-1)/2次比较,不稳定

  时间复杂度:T = O(N^2)

冒泡排序:

  对于链表的排序也适用

  最好情况:顺序 T = O(N)

  最坏情况:逆序 T = O(N^2)

  稳定

插入排序:

  稳定

  最好情况:顺序 T = O(N)

  最坏情况:逆序 T = O(N^2)

时间复杂度下界:

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

  交换2个相邻元素正好消去1个逆序对(冒泡, 插入)

  插入排序:T(N, i) = O(N+I) 如果序列基本有序,则插入排序简单且高效

  定理:任意N个不同元素组成的序列平均具有N(N-1)/4个逆序对

  定理:任何仅以交换相邻元素来排序的算法的算法,平均时间复杂度为Ω(N^2)

  要提高效率,每次交换不止消去1个逆序对,每次交换相隔较远的2个元素

代码:

  

#include 
using namespace std;typedef long long ElementType;void Swap(ElementType *a, ElementType *b){ ElementType temp; temp = *a; *a = *b; *b = temp;}void Bubble_sort(ElementType A[], int N){ int P, flag, i; 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; }}void Insertion_Sort(ElementType A[], int N){ int P, i; ElementType Tmp; for (P = 1; P < N; P++) { Tmp = A[P]; for (i = P; i > 0 && A[i-1] > Tmp; i--) A[i] = A[i-1]; A[i] = Tmp; }}void SimpleSelectionSort(ElementType A[], int N){ int i, j, temp, Min; for (i = 0; i < N-1; i++) { Min = i; for (j = i+1; j < N; j++) if (A[j] < A[Min]) Min = j; if (Min != i) //第i个元素与最小元素交换 Swap(&A[Min], &A[i]); }}int main(){ int N; ElementType A[110000]; cin >> N; for (int i = 0; i < N; i++) cin >> A[i]; //Bubble_sort(A, N); //Insertion_Sort(A, N); SimpleSelectionSort(A, N); for (int i = 0; i < N-1; i++) cout << A[i] << " "; cout << A[N-1]; return 0;}

PTA运行结果:

  • 数据1:只有1个元素;
  • 数据2:11个不相同的整数,测试基本正确性;
  • 数据3:103个随机整数; 
  • 数据4:104个随机整数; 
  • 数据5:105个随机整数; 
  • 数据6:105个顺序整数;
  • 数据7:105个逆序整数; 
  • 数据8:105个基本有序的整数;
  • 数据9:105个随机正整数,每个数字不超过1000。

选择排序:

冒泡排序:

插入排序:

 

转载于:https://www.cnblogs.com/whileskies/p/6863719.html

你可能感兴趣的文章
Maven(八) Maven项目和testng结合应用
查看>>
iOS 的 set.get.构造方法
查看>>
无法根据中文查找
查看>>
文件编码,文件或文件名编码格式转换(转)
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
redis的hash与string区别
查看>>
转载 python多重继承C3算法
查看>>
初用Ajax
查看>>
zabbix 2.2.20 安装详解(Centos6.9)
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
SQL_Server_2008完全学习之第十章触发器
查看>>
git安装和简单配置
查看>>
C# FTP远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)...
查看>>
面向对象:反射,双下方法
查看>>
利用matplotlib绘画出二特征的散点图
查看>>
RabiitMq
查看>>
WebForm 发送邮箱
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
# C++中对PI的引用
查看>>