数据结构之排序再学习
2016-05-23 16:18
197 查看
冒泡排序
这是一种稳定的排序算法//简单排序之冒泡排序 //时间复杂度:最好:原来就是顺序的 T = O(N) // 最坏:原来是逆序的 T = O(N*N) public int[] BubbleSort(int[] A,int n) { int flag = 0; for (int p = n - 1; p >= 0; p--) { flag = 0; for (int i = 0; i < p; i++) { if (A[i] > A[i + 1]) //一趟冒泡 { A[i] = A[i] + A[i + 1]; A[i + 1] = A[i] - A[i + 1]; A[i] = A[i] - A[i + 1]; flag = 1; //标识发生了交换 } } if (flag == 0) //全程无交换 { break; } } return A; }
插入排序
这是一种稳定的排序算法//简单排序之插入排序 //时间复杂度:最好:原来就是顺序的 T = O(N) // 最坏:原来是逆序的 T = O(N*N) public int[] InsertionSort(int[] A, int n) { int temp = 0; int i = 0; for (int p =1; p < n; p++) { temp = A[p]; //摸下一张牌 for ( i = p; i > 0 && A[i-1]> temp; i--) { A[i] = A[i - 1]; // 移出空位 } A[i] = temp; // 新牌落位 } return A; }
相关概念-逆序对(inversion)
对于下标i<j,,如果i<j,如果A[i]>A[j],则称(i,j)是一对逆序对(inversion)。
定理:任意N个不同元素组成的序列平均具有N(N-1)/4个逆序对。
定理:任意仅以交换相邻辆元素来排序的算法,其平均时间复杂度为O(N*N )。
希尔排序
这是一种稳定的排序算法public int[] ShellSort(int[] A, int n)//原始希尔排序;每次都是取一半的间距 { int temp = 0; int i = 0; int d = 0; for (d = n / 2; d > 0; d /=2) { for (int p = d; p < n; p++) { temp = A[p]; //摸下一张牌 for (i = p; i > d && A[i - d] > temp; i-=d) { A[i] = A[i - d]; // 移出空位 } A[i] = temp; // 新牌落位 } } return A; }
相关文章推荐
- JavaScript演示排序算法
- 插入排序
- 冒泡排序
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#冒泡法排序算法实例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C++实现对输入数字组进行排序
- 算法之排序算法的算法思想和使用场景总结
- C++实现简单的希尔排序Shell Sort实例
- php实现插入排序
- PHP版本常用的排序算法汇总
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法