![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序
skajre
这个作者很懒,什么都没留下…
展开
-
排序 冒泡排序
#include#includeusing namespace std;void swap(int a[],int i,int j){ int t=a[i]; a[i]=a[j]; a[j]=t;}void BubbleSort(int a[],int n){ for(int i=n-1;i>=0;i--) { int flag原创 2016-05-12 20:20:18 · 217 阅读 · 0 评论 -
堆排序非递归算法
时间复杂度nlogn,空间复杂度O(1),是不稳定的排序方法。//堆排序非递归算法#include#includeusing namespace std;void AdjustHeap(int a[],int n,int k){ int i=k; int j=2*i; a[0]=a[i]; while(j<=n) { if(ja[j原创 2016-05-14 18:08:43 · 519 阅读 · 1 评论 -
堆排序递归算法
//堆排序递归算法#include#includeusing namespace std;void AdjustHeap(int a[],int n,int k){ int i=k; int j=2*i; a[0]=a[i]; if(i<=n/2) { if(ja[j]) j=j+1; if(a[j]>a[0])原创 2016-05-14 18:34:56 · 515 阅读 · 0 评论 -
树形选择排序
时间复杂度nlogn, 空间复杂度n,这是不稳定排序方法//树形选择排序#include#includeusing namespace std;int q[100],l[100];void creInitTree(int l[],int n){ int m=2*n-1; for(int i=n;i<=m;i++) q[i]=l[i-n+1];原创 2016-05-14 16:30:46 · 1041 阅读 · 0 评论 -
选择排序
时间复杂度O(n^2),空间复杂度O(1),这是不稳定的排序方法。//选择排序#include#includeusing namespace std;void SelectSort(int a[],int n){ for(int i=1;i<n;i++) { int k=i; for(int j=i+1;j<=n;j++)原创 2016-05-14 16:02:52 · 175 阅读 · 0 评论 -
快速排序
//快速排序#include#includeusing namespace std;void quicksort(int a[],int low,int high){ if(low<high) { int i=low,j=high; a[0]=a[i]; while(i<j) { wh原创 2016-05-14 15:53:39 · 219 阅读 · 0 评论 -
表插入排序
时间复杂度O(n^2),空间复杂度O(n),这是稳定的排序方法//表插入排序#include#includeusing namespace std;#define Size 10#define MAX 1000typedef int Elemtype;typedef struct{ Elemtype key; int next;}SLNode;typede原创 2016-05-14 14:59:36 · 531 阅读 · 0 评论 -
折半插入查找
先利用二分查找找到a[[i]在1~i中插入的位置,再移位,插入。空间复杂度O(1),时间复杂度O(n^2),该算法比插入算法好些,属于稳定的排序方法。//折半插入排序#include#includeusing namespace std;#define MAX 100void BinartInsertSort(int a[MAX],int n){ int low,high,原创 2016-05-14 13:34:53 · 638 阅读 · 0 评论 -
2路插入排序
基本思想:以第一个记录为界,将整个记录序列分成两部分进行处理。将不小于第一个记录的所有记录用折半插入的方式插入左路的序列序列中,将小于第一个序列的记录插入用折半插入的方法插入到右路的序列中。final为左路最后一个元素,first为右路第一个元素。空间复杂度O(n),时间复杂度O(n^2),这是稳定的排序方法//2路插入排序#include#include#includeusing原创 2016-05-14 14:12:05 · 1053 阅读 · 0 评论 -
排序 希尔排序
增量选择的是唐纳德增量,对于增量的选择,有好多种,时间复杂度也不同主要典型的有:#include#includeusing namespace std;void ShellSort(int a[],int n){ int i; for(int D=n/2;D>0;D/=2) { for(int p=D;p<n;p++) {原创 2016-05-14 13:19:14 · 199 阅读 · 0 评论 -
排序 插入排序
#include#includeusing namespace std;void swap(int a[],int i,int j){ int t=a[i]; a[i]=a[j]; a[j]=t;}//每次取一个元素,然后插到这个元素前面的有序数列中,那么这个元素完成插入后,0~该元素是一个有序数列,一直循环取数,直至循环停止void InserSort(in原创 2016-05-12 20:49:36 · 190 阅读 · 0 评论 -
归并排序
时间复杂度nlogn,空间复杂度n,归并排序是稳定的排序方法。//归并排序#include#includeusing namespace std;void Merge(int a[],int b[],int i,int m,int j){ int x=i; int y=m+1; int k=i; while(x<=m&&y<=j) {原创 2016-05-14 21:45:51 · 200 阅读 · 0 评论