排序算法比较总结

冒泡排序

每次从头开始(每次结束可以不到最后,因为上一次已经确定最大值在末尾了),比较相邻两个数,每次下沉一个最大值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 #include <iostream>
using namespace std;
 
void bubbleSort(int a[], int length)
{
    bool swapFlag;
    for (int i = 1; i < length; i++)  //两个数,冒泡排序1次;length个数,冒泡排序length-1次。
    {
        swapFlag = false;
        for (int j = 0; j < length - i; j++) //注意终止条件length-i,每次下沉一个最大数,不用比较到最后已确定的数。
        {
            if (a[j] > a[j+1])
            {
                swapFlag = true;
                swap(a[j], a[j+1]);
            }
        }
 
        if (swapFlag == false)
        {
            break;
        }
    }
}
 
int main() {
    int array[9] = {50, 10, 90, 30, 70, 40, 80, 60, 20};
 
    bubbleSort(array,9);
 
    for (int i = 0; i < 9; i++)
    {
        cout << array[i] << endl;
    }
    return 0;
}

插入排序

将数插入到已排序数组中。

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 #include <iostream>
#include <vector>
using namespace std;
 
template <class T>
void insertSort(vector<T> &vec)
{
 
    for (int i = 1; i < vec.size(); i++)
    {
        int j;
        T tmp = vec[i];
 
        for (j = i; (j > 0) && (tmp < vec[j-1]); j—) //是后移,不是交换。
        {
            vec[j]=vec[j-1];
        }
 
        vec[j] = tmp;
    }
}
 
int main()
{
    int array[9] = {50, 10, 90, 30, 70, 40, 80, 60, 20};
    vector<int> intVec(array, array + 9);
    insertSort(intVec);
 
    for (vector<int>::iterator iter = intVec.begin(); iter != intVec.end(); iter++) {
        cout << *iter << endl;
    }
}

 

希尔排序

缩减增量排序,特殊的插入排序,每个增量的排序都是插入排序。

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 #include <iostream>
#include <vector>
using namespace std;
 
void shellSort(vector<int> &a, int length)
{
    for (int gap = length / 2; gap > 0; gap /= 2)
    {
        for (int i = gap; i < length; i++)
        {
            int j;
            int tmp = a[i];
 
            for (j = i; (j - gap >= 0) && (tmp < a[j-gap]); j -= gap)
            {
                a[j] = a[j-gap];
            }
            a[j] = tmp;
        }
    }
}
 
 
int main() {
    int a[] = {9,8,7,6,5,4,3,2,1,0,11};
    vector<int> vec(a, a+11);
    shellSort(vec, 11);
 
 
    for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++) {
        cout << *iter << endl;
    }
 
    return 0;
}

快速排序

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 #include <iostream>
#include <vector>
using namespace std;
 
void quicksort(vector<int> &v, int left, int right)
{
    if (left >= right)
    {
        return;
    }
 
    int low = left;
    int high = right;    //right是结束位,right-1是倒数第一个数。
    int pivot = v[low];  //第一个值作为中枢值。
 
    while (low < high)
    {
        while (low < high && v[--high] > pivot)//--high从倒数第一个数向前找到第一个不大于key的值。
            NULL;
        while (low < high && v[++low] < pivot)//从第2个数(v[low+1])向后找到第一个不小于key的值(v[low]是中枢值,不参与排序).
            NULL;
 
        if (low < high)
        {
            swap(v[low], v[high]);
        }
        else
        {
            break;
        }
    }
 
    swap(v[low], v[left]); //将中枢值与不大于中枢值的最大值交换,至此,v[low]是本次排序中枢值,low左边的数都不大于中枢值,low右边的数都不小于中枢值。
    quicksort(v, left, low);
    quicksort(v, low + 1, right);
}
 
int main()
{
    int a[10] =     { 9,8,7,9,5,4,3,2,1,0 };
 
    vector<int> vec(a, a + 10);
    quicksort(vec, 0, 10);
    for (vector<int>::iterator iter = vec.begin(); iter != vec.end();iter++)
    {
        cout << *iter << endl;
    }
 
    return 0;
}

 

 

 

 

 

 

 

排序算法比较

image

转载于:https://www.cnblogs.com/helloweworld/p/3176458.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如果你还不了解GBDT,不妨看看这篇文章

作者&#xff1a;Freemanzxp简介&#xff1a;中科大研二在读&#xff0c;目前在微软亚洲研究院实习&#xff0c;主要研究方向是机器学习。原文&#xff1a;https://blog.csdn.net/zpalyq110/article/details/79527653Github&#xff1a;https://github.com/Freemanzxp/GBDT_Sim…

来了解下计算机视觉的八大应用

2019 第 40 篇&#xff0c;总第 64 篇文章本文大约7000字&#xff0c;建议收藏阅读之前通过三篇文章简单介绍了机器学习常用的几种经典算法&#xff0c;当然也包括了目前很火的 CNNs 算法了&#xff1a;常用机器学习算法汇总比较(上&#xff09;常用机器学习算法汇总比较(中&am…

itchat 保存好友信息以及生成好友头像图片墙

2019 第 41 篇&#xff0c;总第 65 篇文章本文大约 4000 字&#xff0c;阅读大约需要 12 分钟最近简单运用 itchat 这个库来实现一些简单的应用&#xff0c;主要包括以下几个应用&#xff1a;统计保存好友的数量和信息统计和保存关注的公众号数量和信息简单生成好友头像的图片墙…

启动outlook时报错:mapi无法加载信息服务msncon.dll

今天这个Office2010 outlook搞的让人蛋疼&#xff0c;老是说启动outlook时报错&#xff1a;mapi无法加载信息服务msncon.dll。 百度了一下&#xff0c;如下解决方案&#xff1a; 安装路径为D:\NEW Windows7 File\office2010\Office14 在命令行中定位到outlook安装文件夹&#x…

快速入门Pytorch(1)--安装、张量以及梯度

2019 第 42 篇&#xff0c;总第 66 篇文章本文大约 9000 字&#xff0c;建议收藏阅读&#xff01;这是翻译自官方的入门教程&#xff0c;教程地址如下&#xff1a;https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html虽然教程名字是 60 分钟入门&#xff0…

快速入门PyTorch(2)--如何构建一个神经网络

2019 第 43 篇&#xff0c;总第 67 篇文章本文大约 4600 字&#xff0c;阅读大约需要 10 分钟快速入门 PyTorch 教程第二篇&#xff0c;这篇介绍如何构建一个神经网络。上一篇文章&#xff1a;快速入门Pytorch(1)--安装、张量以及梯度本文的目录&#xff1a;3. 神经网络在 PyTo…

快速入门PyTorch(3)--训练一个图片分类器和多 GPUs 训练

2019 第 44 篇&#xff0c;总第 68 篇文章本文大约14000字&#xff0c;建议收藏阅读快速入门 PyTorch 教程前两篇文章&#xff1a;快速入门Pytorch(1)--安装、张量以及梯度快速入门PyTorch(2)--如何构建一个神经网络这是快速入门 PyTorch 的第三篇教程也是最后一篇教程&#xf…

60分钟快速入门 PyTorch

PyTorch 是由 Facebook 开发&#xff0c;基于 Torch 开发&#xff0c;从并不常用的 Lua 语言转为 Python 语言开发的深度学习框架&#xff0c;Torch 是 TensorFlow 开源前非常出名的一个深度学习框架&#xff0c;而 PyTorch 在开源后由于其使用简单&#xff0c;动态计算图的特性…

5月份 Github 上最热的十个 Python 项目,从Debug工具到AI水军、量化交易系统。

2019 年第 46 篇&#xff0c;总第 70 篇文章原文地址&#xff1a;https://medium.mybridge.co/python-open-source-for-the-past-month-v-may-2019-473e9f60c73f5 月份刚刚过去&#xff0c;之前看到了一篇介绍 5 月份的最热机器学习项目&#xff0c;刚好看到 Mybridge AI 博客又…

[Github项目]基于PyTorch的深度学习网络模型实现

2019 年第 48 篇文章&#xff0c;总第 72 篇文章本文大约 1500 字&#xff0c;阅读大约需要 4 分钟今天主要分享两份 Github 项目&#xff0c;都是采用 PyTorch 来实现深度学习网络模型&#xff0c;主要是一些常用的模型&#xff0c;包括如 ResNet、DenseNet、ResNext、SENet等…

Python基础入门_4函数

Python 基础入门前三篇&#xff1a; Python 基础入门–简介和环境配置Python基础入门_2基础语法和变量类型Python基础入门_3条件语句和迭代循环 第四篇内容&#xff0c;这次介绍下函数的基本用法&#xff0c;包括函数的定义、参数的类型、匿名函数、变量作用域以及从模块导入…