选择、插入、冒泡三种算是最典型的排序算法了,空间复杂度都为O(1)

选择排序时间复杂度跟初始数据顺序无关,O(n2),而且还不稳定;

插入排序时间复杂度跟初始数据顺序有关最好O(n),最坏O(n2),稳定

冒泡排序时间复杂度跟初始数据顺序有关最好O(n),最坏O(n2),稳定

三种算法中对于大量随机数,所需时间插入<选择<冒泡。

// MySort.h: interface for the MySort class.
#include "iostream.h"template<class T>
void swap(T &a,T &b)
{T c=a;a=b;b=c;
}template<class T>
void print(T a[], int n ,int i){  cout<<"第"<<i+1 <<"趟 : ";  for(int j= 0; j<10; j++){  cout<<a[j] <<"  ";  }  cout<<endl;
}  template<class T>
void selectSort(T a[],int n)  //选择排序
{int i,j,k;for(i=0;i<n-1;++i){k=i;for(j=i+1;j<n;++j){if(a[j]<a[k])k=j;}if(k!=i)swap(a[i],a[k]);        }
}template<class T>
void selectSort2(T a[],int n)  //二元选择排序
{int i,j,min,max;for (i=1;i <= n/2;++i)    // 做不超过n/2趟选择排序
    {    min = i; max = i ; //分别记录最大和最小关键字记录位置  for (j= i; j<=n-i; ++j) {  if (a[j] > a[max]) {   max = j ; continue ;   }    if (a[j]< a[min]) min = j ;   }    //该交换操作还可分情况讨论以提高效率  swap(a[i-1],a[min]);if(max!=i)swap(a[n-i],a[max]);#ifdef _DEBUGprint(a,n,i-1);
#endif}
}template<class T>
void insertSort(T a[],int n)  //插入排序
{int i;for(i=1;i<n;++i){if(a[i]<a[i-1]){int j= i-1; T x = a[i];         //复制为哨兵,即存储待排序元素 a[i] = a[i-1];      //先后移一个元素while(j>=0 && x<a[j])     //查找在有序表的插入位置
            {   a[j+1] = a[j];  //元素后移 j--;            }  a[j+1] = x;        //插入到正确位置
        } }}
template<class T>
void bubbleSort(T a[],int n)  //冒泡排序
{
/*
int i,j;
for(i=0; i<n-1; ++i) {
for(j=0; j<n-i-1; ++j) {
if(a[j] > a[j+1])
{
swap(a[j],a[j+1]);
}
}
#ifdef _DEBUG
print(a,n,i);
#endif
} */bool bSwaped = true;int i,j;int lastSwapPos, lastSwapPos_temp = 0; for(i=0; i<n-1; ++i) {  bSwaped = false;  lastSwapPos = lastSwapPos_temp; for(j=n-1; j>lastSwapPos; j--) {  if(a[j-1] > a[j])  {  swap(a[j],a[j-1]); bSwaped = true;  lastSwapPos_temp = j - 1;  }  }         // 如果上一次扫描没有发生交换,则说明数组已经全部有序,退出循环  if(!bSwaped)break;} }

转载于:https://www.cnblogs.com/nkzhangkun/p/3990923.html

选择、插入、冒泡排序相关推荐

  1. php冒泡 插入选择 排序,说说PHP数组的三种排序(冒泡/选择/插入)方法

    说说PHP数组的三种排序(冒泡/选择/插入)方法 PHP #数组 #排序 #冒泡 #选择 #插入2012-05-30 10:17 一.冒泡排序法 说明:找到最大的数,排列到最后面,然后继续找 例: $ ...

  2. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  3. 插入,选择和冒泡排序原理

    插入排序 //插入排序的基本思想: //1.外层循环控制每趟,一般是数组元素长度减一次,因为最后一次不需要在进行排序 //2.内层循环控制每趟的次数,每次让当前索引元素与下一个索引位置元素进行比较,将 ...

  4. 选择排序-冒泡排序-归并排序-快速排序-插入排序

    选择排序 基本思想: 设所排序序列个数为N,i取1,2,3-n-1,从N-i+1个记录(Ri,Ri+1-.Rn)中找出排序码最小的记录,与第i个记录交换,执行N-1次后完成序列的排序. //选择排序 ...

  5. 算法笔记-排序算法(冒泡 选择 插入)

    首先罗列一下常见的十大排序算法: 一.冒泡排序 1. 定义: 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则 ...

  6. 二分算法,选择,冒泡排序算法

    package com.zlhj.logic.doc; import java.util.Arrays; /** * 类的作用: * * @ClassName : Tser * @Author : l ...

  7. 选择加冒泡排序法与找鞍马之总结与感受

    选择排序法 本题要求将给定的n个整数从大到小排序后输出. 输入格式: 输入第一行给出一个不超过10的正整数n.第二行给出n个整数,其间以空格分隔. 输出格式: 在一行中输出从大到小有序的数列,相邻数字 ...

  8. 选择排序 冒泡排序 二分查找

    选择排序 int [] arr = {2,48,28,32,90,12}; for(int i= 0: i < arr.length - 1;i++){ for(int j = i + 1; j ...

  9. iOS swift 选择排序 冒泡排序 快速排序

    返回上级目录:iOS 算法题 三大经典排序 | 冒泡排序,选择排序,快速排序 - 知乎 文章目录 1.选择排序 2.冒泡排序 3.快速排序 1.选择排序 //选择排序 func rankSelect( ...

  10. mysql 选择插入语句_带有last_insert_id()的Mysql多行插入 – 选择语句

    好.所以缺点是,我试图做一个INSERT SELECT,例如: START TRANSACTION; INSERT INTO dbNEW.entity (commonName,surname) SEL ...

最新文章

  1. Angular CLI在线安装和离线安装
  2. html 文件、图片、txt 下载 链接和按钮
  3. mysql schema是什么_MySQL中information_schema是什么
  4. axios vue 回调函数_前端Vue 面试题大全
  5. wordpress个人博客小程序带流量主+教程
  6. java基础面试题之:普通类和抽象类有哪些区别?
  7. 联合国儿童基金会投资六家区块链初创企业,目标是解决“全球性挑战”
  8. java获取Timestamp类型的当前系统时间
  9. VBA 声明 Option Explicit,让代码更规范
  10. 查询相关股票十档行情的方法
  11. java map 集合实例_Java之集合类【HashMap】【入门版,实例解析】
  12. python第二十二天,configparser模块 subprocess 模块,xlrd 模块(表格处理)
  13. 李学斌:广告的罪恶与救赎
  14. 2018HN省队集训
  15. 希尔伯特变换产生负频率解决方法
  16. 拼小圈营销群_拼多多拼小圈引流卖货全攻略
  17. 西妥昔单抗丨艾美捷西妥昔单抗Cetuximab方案
  18. 图灵的文章“Computing machinery and intelligence”译文
  19. 测试工具:adb+perfdog+charles+tidevice+Monkey
  20. 尚硅谷在线教育九:尚硅谷在线教育NUXT搭建前台环境以及相关页面的编写

热门文章

  1. ubuntu18.04安装python3_在 Ubuntu 18.04 上安装 Python 3.7
  2. JS面向对象——Object对象的方法补充、原型继承关系图
  3. 二十三、PHP框架Laravel学习笔记——集合的常用方法
  4. Web框架——Flask系列之综合案例——图书管理系统(十)
  5. 论文阅读 - TransNet and TransNet V2
  6. LeetCode 1807. 替换字符串中的括号内容(哈希map)
  7. php怎么获取分类数,php 两种获取分类树的方法
  8. fastdfs windows部署_Go在windows下编译Linux可执行文件
  9. 高效程序员的 7 项技能
  10. liunx中udp服务器与客户端创建