c++各种排序
1.插入排序
- void InsertSort(int a[], int n)
- {
- int temp, i, j;
- for (i = ; i < n; i++)
- {
- if (a[i] < a[i - ])
- {
- temp = a[i];
- for (j = i - ; j >= && a[j]>temp; j--)
- a[j + ] = a[j];
- a[j + ] = temp;
- }
- }
- }
时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:稳定
2.希尔排序
- void ShellSort(int a[], int n)
- {
- int dk,temp, i, j;
- for (dk = n / ; dk >= ; dk /= )
- {
- for (i = dk; i <n; i+=dk)
- {
- if (a[i] < a[i - dk])
- {
- temp = a[i];
- for (j = i - dk; j>=&&a[j]>temp; j -= dk)
- a[j + dk] = a[j];
- a[j + dk] = temp;
- }
- }
- }
- }
时间复杂度:O(n1.3)
最坏时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:不稳定
3.冒泡排序
- void BubbleSort(int a[], int n)
- {
- int temp,flag;
- for (int i = ; i < n ; i++)
- {
- flag = ;
- for (int j = ; j < n-i; j++)
- {
- if (a[j]>a[j + ])
- {
- temp = a[j];
- a[j] = a[j + ];
- a[j + ] = temp;
- flag = ;
- }
- }
- if (flag == ) break;
- }
- }
时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:稳定
4.快速排序:O(nlog)---O(1)----稳定
- int Parttion1(int a[], int low,int high)
- {
- int temp = a[low];
- while (low < high)
- {
- while (low < high&&a[high] >= temp) high--;
- a[low] = a[high];
- while (low < high&&a[low] <= temp) low++;
- a[high] = a[low];
- }
- a[low] = temp;
- return low;
- }
- void swap(int &a, int &b)
- {
- int temp;
- temp = a;
- a = b;
- b = temp;
- }
- int Parttion2(int a[], int low, int high)
- {//将小于等于a[high]的元素移到最前面,最后再将a[high]移到最终位置
- int temp = a[high];
- int i = low - ;
- for (int j = low; j < high; j++)
- {
- if (a[j] <= temp)
- {
- i++;
- swap(a[i], a[j]);
- }
- }
- swap(a[i + ], a[high]);
- return i + ;
- }
- void QuickSort(int a[], int low, int high)
- {
- if (low < high)
- {
- int p = Parttion2(a, low, high);
- QuickSort(a, low, p - );
- QuickSort(a, p + , high);
- }
- }
时间复杂度:O(n2)--基本有序或逆序的情况
空间复杂度:O(n)
稳定性:不稳定
平均时间复杂度最好:O(nlog2n)
5.简单选择排序
- void SelectSort(int a[], int n)
- {
- int min;
- for (int i = ; i < n-; i++)
- {
- min = i;
- for (int j = i+; j < n; j++)
- {
- if (a[j] < a[min])
- min = j;
- }
- if (min!=i)
- swap(a[min], a[i]);
- }
- }
时间复杂度:O(n2)
空间复杂度:O(1)
稳定性:不稳定
6.堆排序
- void AdjustDown(int a[], int k, int n)
- {
- a[] = a[k]; //a[0]是暂存单元
- for (int i = * k; i <= n; i *= )
- {
- if (i < n&&a[i] < a[i + ]) i++;
- if (a[]>=a[i]) break;
- else
- {
- a[k] = a[i];
- k = i;
- }
- }
- a[k] = a[];
- }
- void AdjustUp(int a[], int k)
- {
- a[] = a[k];
- for (int i = k / ; i > ; i /= )
- {
- if (a[i] > a[]) break;
- else
- {
- a[k] = a[i];
- k = i;
- }
- }
- a[k] = a[];
- }
- void BuildMaxHeap(int a[], int n)
- {
- /*for (int i = n / 2; i > 0; i--)
- AdjustDown(a, i, n);*/
- for (int i = n; i > ; i--)
- AdjustUp(a, i);
- }
- void HeapSort(int a[], int n)
- {
- BuildMaxHeap(a, n);
- for (int i = n; i > ; i--)
- {
- swap(a[], a[i]);
- AdjustDown(a, , i - );
- }
- }
时间复杂度:O(nlog2n)
空间复杂度:O(1)
稳定性:不稳定
c++各种排序的更多相关文章
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- iOS可视化动态绘制八种排序过程
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中
#coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...
- javascript排序
利用array中的sort()排序 w3cfunction sortNumber(a,b) { return a - b } var arr = new Array(6) arr[0] = " ...
- iOS自定义model排序
在开发过程中,可能需要按照model的某种属性排序. 1.自定义model @interface Person : NSObject @property (nonatomic,copy) NSStri ...
- Lucene4.4.0 开发之排序
排序是对于全文检索来言是一个必不可少的功能,在实际运用中,排序功能能在某些时候给我们带来很大的方便,比如在淘宝,京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评论数最 ...
随机推荐
- ORACLE中大数据量查询实现优化
大数据量查询,对数据库开发者来说,性能问题往往是最需要费尽心机的,借此总结自己优化此类问题的心得与大家分享,以免大家走更多的弯路. 1.使用主键临时表 大数据量表关联查询,是性能开销的主要原因.通过主 ...
- UISearchDisplayController隐藏navigationBar需注意
不能调用self.navigationController.navigationBar.hidden = YES: 调用此代码的话,你隐藏了navigationBar搜索展示控制器就拿不到导航条:就会 ...
- DWZ (JUI) 教程 table 排序
dwz排序是后台排序,不是前台的js排序,他的流程和搜索,分页是一样的,当你点击排序的按钮时,从新发送请求刷新当前的navTable 和 dialog. <th width="60&q ...
- ArrayList与List对象用法与区别
比如: 代码如下 复制代码 string[] s=new string[3];//赋值s[0]="a";s[1]="b";s[2]="c"; ...
- UI1_UITabBarController
// // AppDelegate.h // UI1_UITabBarController // // Created by zhangxueming on 15/7/8. // Copyright ...
- 9款经典华丽的CSS3分享按钮
如果你经常活跃在一些社交网站上,那么你肯定会看到过很多形式各异的分享按钮,目前由于HTML5和CSS3的普及,很多分享按钮也都应用了CSS3样式,甚至会有很多带有动画的CSS3分享按钮.本文就向大家介 ...
- 反射-Reflect
1.得到一份Class(同一个类在JVM中只有一份字节码) 三种方式:类名.class, Class.forName("全限定名");, 对象.getClass(); 基本类型 i ...
- cpoint
#include<iostream> #include<math.h> using namespace std; class CPoint { public: int cpoi ...
- 控制反转 (inversion of control)
The inversion of control (IoC) pattern is abstract; it says that one should move dependency creation ...
- 《通过脚本查看哪些ip被占用》shell笔记
改脚本查看哪些ip被占用. #!/bin/bash for i in {1..10} //赋予i变量1-10 do //干什么 ping -c1 -w1 192.168.7.$i && ...