选择、插入、冒泡排序
选择、插入、冒泡三种算是最典型的排序算法了,空间复杂度都为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
选择、插入、冒泡排序相关推荐
- php冒泡 插入选择 排序,说说PHP数组的三种排序(冒泡/选择/插入)方法
说说PHP数组的三种排序(冒泡/选择/插入)方法 PHP #数组 #排序 #冒泡 #选择 #插入2012-05-30 10:17 一.冒泡排序法 说明:找到最大的数,排列到最后面,然后继续找 例: $ ...
- C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划
C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...
- 插入,选择和冒泡排序原理
插入排序 //插入排序的基本思想: //1.外层循环控制每趟,一般是数组元素长度减一次,因为最后一次不需要在进行排序 //2.内层循环控制每趟的次数,每次让当前索引元素与下一个索引位置元素进行比较,将 ...
- 选择排序-冒泡排序-归并排序-快速排序-插入排序
选择排序 基本思想: 设所排序序列个数为N,i取1,2,3-n-1,从N-i+1个记录(Ri,Ri+1-.Rn)中找出排序码最小的记录,与第i个记录交换,执行N-1次后完成序列的排序. //选择排序 ...
- 算法笔记-排序算法(冒泡 选择 插入)
首先罗列一下常见的十大排序算法: 一.冒泡排序 1. 定义: 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则 ...
- 二分算法,选择,冒泡排序算法
package com.zlhj.logic.doc; import java.util.Arrays; /** * 类的作用: * * @ClassName : Tser * @Author : l ...
- 选择加冒泡排序法与找鞍马之总结与感受
选择排序法 本题要求将给定的n个整数从大到小排序后输出. 输入格式: 输入第一行给出一个不超过10的正整数n.第二行给出n个整数,其间以空格分隔. 输出格式: 在一行中输出从大到小有序的数列,相邻数字 ...
- 选择排序 冒泡排序 二分查找
选择排序 int [] arr = {2,48,28,32,90,12}; for(int i= 0: i < arr.length - 1;i++){ for(int j = i + 1; j ...
- iOS swift 选择排序 冒泡排序 快速排序
返回上级目录:iOS 算法题 三大经典排序 | 冒泡排序,选择排序,快速排序 - 知乎 文章目录 1.选择排序 2.冒泡排序 3.快速排序 1.选择排序 //选择排序 func rankSelect( ...
- mysql 选择插入语句_带有last_insert_id()的Mysql多行插入 – 选择语句
好.所以缺点是,我试图做一个INSERT SELECT,例如: START TRANSACTION; INSERT INTO dbNEW.entity (commonName,surname) SEL ...
最新文章
- Angular CLI在线安装和离线安装
- html 文件、图片、txt 下载 链接和按钮
- mysql schema是什么_MySQL中information_schema是什么
- axios vue 回调函数_前端Vue 面试题大全
- wordpress个人博客小程序带流量主+教程
- java基础面试题之:普通类和抽象类有哪些区别?
- 联合国儿童基金会投资六家区块链初创企业,目标是解决“全球性挑战”
- java获取Timestamp类型的当前系统时间
- VBA 声明 Option Explicit,让代码更规范
- 查询相关股票十档行情的方法
- java map 集合实例_Java之集合类【HashMap】【入门版,实例解析】
- python第二十二天,configparser模块 subprocess 模块,xlrd 模块(表格处理)
- 李学斌:广告的罪恶与救赎
- 2018HN省队集训
- 希尔伯特变换产生负频率解决方法
- 拼小圈营销群_拼多多拼小圈引流卖货全攻略
- 西妥昔单抗丨艾美捷西妥昔单抗Cetuximab方案
- 图灵的文章“Computing machinery and intelligence”译文
- 测试工具:adb+perfdog+charles+tidevice+Monkey
- 尚硅谷在线教育九:尚硅谷在线教育NUXT搭建前台环境以及相关页面的编写
热门文章
- ubuntu18.04安装python3_在 Ubuntu 18.04 上安装 Python 3.7
- JS面向对象——Object对象的方法补充、原型继承关系图
- 二十三、PHP框架Laravel学习笔记——集合的常用方法
- Web框架——Flask系列之综合案例——图书管理系统(十)
- 论文阅读 - TransNet and TransNet V2
- LeetCode 1807. 替换字符串中的括号内容(哈希map)
- php怎么获取分类数,php 两种获取分类树的方法
- fastdfs windows部署_Go在windows下编译Linux可执行文件
- 高效程序员的 7 项技能
- liunx中udp服务器与客户端创建