【数据结构8】排序

简介: 0 各种排序的比较1 内部排序1-1 插入型排序1-1-1 直接插入排序1-1-2 折半插入排序1-1-3 希尔shell排序1-2 交换型排序1-2-1 简单冒泡排序1-2-2 高级冒泡排序1-2-3 快速排序1-3 选择型排序...

0、 各种排序的比较

内部算法 时间复杂度(最好) 时间复杂度(评价) 时间复杂度(最坏) 空间复杂度 是否稳定 备注
直接插入排序 O(n) O(n^2) O(n^2) O(1) n<50,默认有序为佳
简单冒泡排序 O(n) O(n^2) O(n^2) O(1) n<50,默认有序为佳
简单选择排序 O(n^2) O(n^2) O(n^2) O(1) n<50,元素信息量小为佳
希尔shell排序 O(n^1.3) O(n^1.3) O(n^1.3) O(1)
快速排序 O(n*log(n)) O(n*log(n)) O(n^2) O(log(n)) 适用n大,元素随机分布最佳
堆排序 O(n*log(n)) O(n*log(n))) O(n*log(n)) O(1) 适用n大
二路归并排序 O(n*log(n)) O(n*log(n)) O(n*log(n)) O(n) 适用n大
基数排序 O(d(n+r)) O(d(n+r)) O(d(n+r)), O(rd) O(r) n大且关键字位少

1、 内部排序

1-1 插入型排序

1-1-1 直接插入排序

#include <stdio.h>

void insert_simple(int a[], int n){
        int i, j;
        for(i = 2; i <= n;i++)
                if(a[i] < a[i-1]){
                        a[0] = a[i];
                        for(j = i-1; a[0] < a[j]; j--)
                                a[j+1] = a[j];
                        a[j+1] = a[0];
                }
}

int main()
{
        int n, data[]={-99999,4,5,2,-4,5,0,9}; // the first is sentinel.
        n = sizeof(data)/sizeof(int) - 1;
        insert_simple(data,n);
        for(int i = 1; i <= n; i++)printf("%d ", data[i]);
        return 0;
}

1-1-2 折半插入排序

#include <stdio.h>

void insert_half(int a[], int n){
        int i, j, low, high, mid;
        for(i = 2; i <= n;i++){
                a[0] = a[i];
                low = 1, high = i-1;
                while(low <= high){
                        mid = (low + high) / 2;
                        if(a[mid] > a[0]) high = mid - 1;
                        else low = mid + 1;
                }
                for(j = i-1; j >= high + 1; j--) a[j+1] = a[j];
                a[high+1] = a[0];
        }
}

int main()
{
        int n, data[]={-99999,4,5,2,-4,5,0,9}; // the first is sentinel.
        n = sizeof(data)/sizeof(int) - 1;
        insert_half(data,n);
        for(int i = 1; i <= n; i++)printf("%d ", data[i]);
        return 0;
}

1-1-3 希尔shell排序

1-2 交换型排序

1-2-1 简单冒泡排序

1-2-2 高级冒泡排序

1-2-3 快速排序

  • 《数据结构》C语言版 严蔚敏教材的方法(交换最少)

这里写图片描述
这里写图片描述

  • 《算法》第4版 Robert Sedgewick and Kevin Wayne的方法(最直观)

这里写图片描述
这里写图片描述

  • 《算法导论》第3版 Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein的方法

这里写图片描述

这里写图片描述

1-3 选择型排序

1-3-1 简单选择排序

1-3-2 堆排序

1-4 归并排序

1-4-2 二路归并排序

1-5 基数排序

2、 外部排序

2-1 多路归并排序

Wu_Being 博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《【数据结构8】排序》
http://blog.csdn.net/u014134180/article/details/55506271

Wu_Being 吴兵博客接受赞助费二维码

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。

目录
相关文章
|
4天前
数据结构第六课 -------迭代排序(快速排序和归并排序)
数据结构第六课 -------迭代排序(快速排序和归并排序)
|
4天前
数据结构第六课 -----排序-2
数据结构第六课 -----排序
数据结构第六课 -----排序-2
|
4天前
数据结构第六课 -----排序-1
数据结构第六课 -----排序
|
5天前
数据结构——lesson13排序之计数排序
数据结构——lesson13排序之计数排序
|
5天前
|
人工智能 算法 搜索推荐
数据结构——lesson12排序之归并排序
数据结构——lesson12排序之归并排序
|
5天前
数据结构——lesson11排序之快速排序
数据结构——lesson11排序之快速排序
|
5天前
|
算法 搜索推荐 测试技术
数据结构——lesson10排序之插入排序
数据结构——lesson10排序之插入排序
|
5天前
|
算法
数据结构——lesson9排序之选择排序
数据结构——lesson9排序之选择排序
|
5天前
|
存储 搜索推荐 算法
数据结构奇妙旅程之七大排序
数据结构奇妙旅程之七大排序
|
8天前
|
算法 索引
数据结构与算法-排序进阶入门
数据结构与算法-排序进阶入门
7 0