美文网首页
排序算法大合集

排序算法大合集

作者: Allen的光影天地 | 来源:发表于2018-11-29 16:26 被阅读8次

基本概念

  • 排序的稳定性
    任意两个相等的数据,排序前后相对位置不发生改变

题目

给定N个(长整型范围内的)整数,要求输出从小到大排序后的结果。

本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:

  • 数据1:只有1个元素;
  • 数据2:11个不相同的整数,测试基本正确性;
  • 数据3:1000个随机整数;
  • 数据4:10000个随机整数;
  • 数据5:100000个随机整数;
  • 数据6:100000个顺序整数;
  • 数据7:100000个逆序整数;
  • 数据8:100000个基本有序的整数;
  • 数据9:100000个随机正整数,每个数字不超过1000。

代码合集

//
// Created by allenhsu on 2018/11/28.
//

#include <iostream>
using namespace std;
int N;
int list[100000];

void Swap(int a, int b){
    int temp = list[a];
    list[a] = list[b];
    list[b] = temp;
}

// 冒泡排序: 两个相邻的元素做比较
void Bubble_sort(){
    for (int i = N - 1; i > 0; --i) {
        int flag = 0;
        for (int j = 0; j < i; ++j) {
            if (list[j] > list[j + 1]) {
                Swap(j,j+1);
                flag = 1;
            }
        }
        if (!flag) break;
    }
}

// 一直保证前面的序列是递增的
void Insert_Sort(){
    for (int i = 1; i < N; ++i) {
        for (int j = i - 1; j >= 0 && list[j] > list[j + 1]; --j) {
            Swap(j, j + 1);
        }
    }
}

int main(){
    cin >> N;
    for (int i = 0; i < N; ++i) {
        cin >> list[i];
    }

    Insert_Sort();
    cout << list[0];
    for (int j = 1; j < N; ++j) {
        cout <<  " " << list[j];
    }
    return 0;
}

测试结果

  • 冒泡排序


    image.png
  • 插入排序


    插入排序算法
  • 希尔排序—插入排序的改进
    三层循环,第一层,决定步长的大小;第二层,决定比较的两个数之一;第三层,决定第二个比较数字。所以要跨步长的作比较,我们的步长需要在第三层中加入即可。
    下图可以看出已经很快了。
    希尔排序是不稳定的,因为最开始大步长的时候,是跳着来的。


    希尔排序
  • 选择排序
    每一次从剩余所有中选最小的,放在已经排好序的末尾


    选择排序
  • 堆排序—选择排序的改进
    选择排序中最费时间的是每次找出剩余元素中的最小元。这正是最小堆的用武之地。
    两种方法:

    1. 先从list建立起来MinHeap, 然后新建一个临时templist, 将MinHeap弹出依次放入templist中,最后在将templist复制回list;
    2. 聪明的不费空间的方法:从list建立起一个最大堆MaxHeap, 每次将最大元素与末尾元素交换,然后MaxHeap扔掉最后的元素重新生成最大堆


      堆排序
  • 归并排序

  • 快排

  • 表排序

  • 基数排序

相关文章

  • 排序算法大合集

    基本概念 排序的稳定性任意两个相等的数据,排序前后相对位置不发生改变 题目 给定N个(长整型范围内的)整数,要求输...

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • 排序算法合集

    排序算法汇总 各类排序算法时间空间复杂度如下表所示: 1:直接选择排序: 排序思想: 选取当前最小(最大)的数据放...

  • 数据结构与算法(二):排序算法

    十大基础排序算法。 Basic-Sorting-Algorithm 关于十大基本排序算法的整理。 十大排序算法分别...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • Algorithm -- 排序算法

    单链表十大经典排序算法冒泡排序选择排序插入排序归并排序快速排序堆排序计数排序桶排序 1. 十大经典排序算法 十大经...

  • 十大经典排序算法&七大查找算法

    十大经典排序算法: 十大经典排序算法的时间、空间复杂度: 冒泡排序(Bubble Sort) 算法描述: 1、比较...

  • 2020-04-30-排序算法

    冒泡排序 直接选择排序 插入排序 快速排序 参考 算法学习笔记17-经典排序算法八大排序算法稳定性分析

网友评论

      本文标题:排序算法大合集

      本文链接:https://www.haomeiwen.com/subject/zozzqqtx.html