编程珠玑---读书笔记---第11章排序
来源:互联网 发布:淘宝老a 编辑:程序博客网 时间:2024/05/16 01:35
插入排序:
对于小型的排序任务速度很快,它是稳定的,只需要O(1)的额外空间,基于比较和交换的次数为O(n^2)。
#include <iostream>#include <string>#include <cstdio>#include <cmath>#include <vector>#include <algorithm>#include <sstream>#include <cstdlib>#include <fstream>#include <queue>using namespace std;int x[8]={55,41,59,26,53,58,97,93};int main(){//ifstream fin;//fin.open("data1.txt");for(int i=1;i<8;i++)for(int j=i;j>0 && x[j]<x[j-1];j-- ){int t=x[j];x[j]=x[j-1];x[j-1]=t;}for(int i=0;i<8;i++)cout<<x[i]<<" ";cout<<endl;return 0;}
快速排序:
如果n很大,快速排序的O(n*logn)的运行时间就很关键了,在结合随机划分和双向划分后,对于任意的n元输入数组,快排的期望运行时间正比于 n logn。
下面代码的版本是基于第一个元素进行划分,对于随机输入的数据这是没有问题的,但是对于某些常见输入,比如数组已基本有序,那么最坏情况下需要
O(n^2)的时间,这时候,我们可以才用随机划分元素的方法,可以改善性能,通过把第一个元素和后面所有元素中的一个随机项交换来实现这一点:
#include <iostream>#include <string>#include <cstdio>#include <cmath>#include <vector>#include <algorithm>#include <sstream>#include <cstdlib>#include <fstream>#include <queue>using namespace std;int x[8]={55,41,59,26,53,58,97,93};void qsort1(int l,int u){if(l>=u)return;int m=l;for(int i=l+1;i<=u;i++){if(x[i]<x[l]){m++;int t=x[m];x[m]=x[i];x[i]=t;}}int t=x[l];x[l]=x[m];x[m]=t;qsort1(l,m-1);qsort1(m+1,u);}int main(){qsort1(0,7);for(int i=0;i<8;i++)cout<<x[i]<<" ";cout<<endl;return 0;}
顺便说一下:C库函数qsort非常简单相对较快,但是它比我们自己写的快排慢,仅仅是因为其通用而灵活的接口对每次比较都使用函数调用,C++库函数sort具有最简单的
接口:我们通过调用sort(x,x+n)来对数组x排序,实现也很高效。
- 编程珠玑---读书笔记---第11章排序
- 排序(《编程珠玑》第11章)
- 编程珠玑:第11章 排序 11.1 插入排序
- [编程珠玑读书笔记] 插入排序
- [编程珠玑读书笔记]快速排序
- 编程珠玑第11章--应用之排序
- 堆排序(《编程珠玑》第14章)
- 堆排序(《编程珠玑》第14章)
- 编程珠玑第11章
- 编程珠玑 11章 排序
- <<编程珠玑>>读书笔记 NO. 11章 Qsort1
- [编程珠玑读书笔记]堆排序,小根堆
- 《编程珠玑2》读书笔记-插入排序
- 编程珠玑 第10/11/12章
- 部分排序(《编程珠玑(续)》第15章)
- 编程珠玑第7章
- 编程珠玑第8章
- 编程珠玑第9章
- ruby中的Hash排序
- 汇编指令大全(有注释)
- Mysql Explain 详解
- UNP学习笔记-第5章
- oracle 64为报错的问题
- 编程珠玑---读书笔记---第11章排序
- memset用法详解(转)
- Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- Java Regular Expression Tutorial
- Android应用开发笔记(10):制作自定义背景Button按钮、自定义形状Button的全攻略
- iOS静态库相关-封装lib
- sizeof解析
- IE浏览器百度地图一片空白(借用)
- android 编译boost动态库