排序算法比较总结

冒泡排序

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

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…

javascript 面向对象编程小记

虽然平常用jquery用的很熟&#xff0c;但是基本都是面向过程的写法。一个事件一个function&#xff0c;很少有面向对象的写法。今天得写一个日期控件&#xff0c;不得不用上面向对象编程。 刚开始我的想法是: var datepicker function(){return new datepicker.fn.init(); }da…

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

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

CRM系统助家具企业华丽转身

近年来&#xff0c;随着住宅建设规模的扩大&#xff0c;作为住宅主要配套商品的家具将迎来广阔的发展机遇和市场增长空间。 我国家具行业以中小企业为多&#xff0c;并且小型私营家具企业在当中占大比例&#xff0c;管理粗放&#xff0c;实行的大多是家族式、经验式管理&#x…

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…

程序员的职业素养文摘

第1章 专业主义 第2章 说“不” 第3章 说“是” 第4章 编码 第5章 测试驱动开发 第6章 练习 第7章 验收测试 第8章 测试策略 第9章 时间管理 第10章 预估 第11章 压力 第12章 协作 第13章 团队与项目 第14章 辅导&#xff0c;学徒期与技艺转载于:https://www.cnblogs.com/smile…

快速入门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;动态计算图的特性…

【deep learning学习笔记】注释yusugomori的LR代码 --- LogisticRegression.cpp

模型实现代码&#xff0c;关键是train函数和predict函数&#xff0c;都很容易。 #include <iostream> #include <string> #include <math.h> #include "LogisticRegression.h" using namespace std;LogisticRegression::LogisticRegression(int si…

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 博客又…