选择排序、冒泡排序、直接插入排序
来源:互联网 发布:大数据hadoop开发平台 编辑:程序博客网 时间:2024/05/22 07:07
选择排序
时间复杂度 O(n^2)
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。
冒泡排序
时间复杂度 最差O(n^2) 最好O(n)
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
直接插入排序
时间复杂度 O(n^2)
一种查找比较操作和记录移动操作交替地进行的方法。具体做法:
将待插入记录R[i]的关键字从右向左依次与有序区中记录R[j](j=i-1,i-2,…,1)的关键字进行比较:
① 若R[j]的关键字大于R[i]的关键字,则将R[j]后移一个位置;
②若R[j]的关键字小于或等于R[i]的关键字,则查找过程结束,j+1即为R[i]的插入位置。
关键字比R[i]的关键字大的记录均已后移,所以j+1的位置已经腾空,只要将R[i]直接插入此位置即可完成一趟直接插入排序。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){int a[15],b[15],c[15];int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);b[i]=a[i];c[i]=a[i];}//选择排序for(int i=0;i<n;i++){int mi=a[i];int k=i;for(int j=i+1;j<n;j++){if(mi>a[j]){mi=a[j];k=j;}}if(mi!=a[i]){int temp=a[i];a[i]=a[k];a[k]=temp;}}for(int i=0;i<n;i++)printf(" %d",a[i]);printf("\n");//冒泡排序for(int i=0;i<n-1;i++){for(int j=0;j<n-1-i;j++){if(b[j]>b[j+1]){int temp=b[j];b[j]=b[j+1];b[j+1]=temp;}}}for(int i=0;i<n;i++)printf(" %d",b[i]);printf("\n");//直接插入排序for(int i=1;i<n;i++){if(c[i]<c[i-1]){int temp=c[i];int j;for(j=i-1;j>=0&&c[j]>temp;j--)c[j+1]=c[j];c[j+1]=temp;}}for(int i=0;i<n;i++)printf(" %d",c[i]);printf("\n");return 0;}/*54 9 1 6 3 1 3 4 6 9 1 3 4 6 9 1 3 4 6 9请按任意键继续. . .*/
阅读全文
0 0
- 直接插入排序,选择排序,冒泡排序
- 选择排序、冒泡排序、直接插入排序
- 简单排序:冒泡排序、直接插入排序、直接选择排序
- 排序之----冒泡,直接插入,选择排序
- 排序01:冒泡排序 选择排序 直接插入排序
- 冒泡排序,选择排序,直接插入排序,二分查找排序
- 冒泡排序、直接插入排序、选择插入排序
- 冒泡排序,直接选择排序,插入排序实现
- 冒泡排序、选择排序、直接插入排序(java实现)
- 随机产生及冒泡排序、选择排序、直接插入排序
- 直接插入排序 + 希尔排序+ 冒泡排序+ 快速排序 + 直接选择排序 + 堆排序
- 排序学习(直接插入排序,折半插入排序,冒泡排序,快速排序,简单选择排序)
- 冒泡排序 快速排序 选择排序 堆排序 直接插入排序 希尔排序 归并排序
- 简单排序---冒泡,简单选择,直接插入
- 直接插入、简单选择、冒泡排序
- 简单排序(冒泡,选择,直接插入)
- 冒泡排序、直接插入排序
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序...)
- JAVA读取Doc、Docx及注意点
- bzoj3524 [Poi2014]Couriers 主席树
- MongoDB学习第3天,命令行导入json
- 欢迎使用CSDN-markdown编辑器
- 059day(继承和复合关系,覆盖和保护成员)
- 选择排序、冒泡排序、直接插入排序
- C++中前置声明的使用
- 1063. 计算谱半径(20)
- 【Codeforces Round #268(Div 1)】Tree
- swing笔记
- struct和typedef struct
- 设计模式之中介者模式
- BZOJ3890 [Usaco2015 Jan]Meeting Time K短路 Astar || 拓扑DP
- arpa2fst 原理详解