C语言/C++学习之排序算法总结以及c++实现源码分享
小职 2020-12-31 来源 :https://juejin.cn/post/6868314820744052750 阅读 1252 评论 0

摘要:排序算法是算法的基础,扎实掌握是一个合格程序员的内功,本篇是C语言/C++学习之排序算法总结以及c++实现源码分享,希望对C语言C++的学习有所帮助。

排序算法是算法的基础,扎实掌握是一个合格程序员的内功,本篇是C语言/C++学习之排序算法总结以及c++实现源码分享,希望对C语言C++的学习有所帮助。


C语言/C++学习之排序算法总结以及c++实现源码分享


一. 选择排序

1.算法思想

从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。


2.c++代码实现

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;


template<typename T>

void selectionSort(vector<T> & arr) {

for (int i = 0; i < arr.size(); ++i) {

int minIndex = i;

for (int j = i + 1; j < arr.size(); ++j) {

if (arr[j] < arr[minIndex])

minIndex = j;

}

swap(arr[i], arr[minIndex]);

}

}


int main() {

vector<int> arr{ 4,7,8,3,6,45 };

selectionSort(arr);

for (auto it = arr.begin(); it!= arr.end(); it++) {

cout << *it << " ";

}

system("pause");

return 0;

}                                          


时间复杂度:O(N^2)

空间复杂度:O(1)



二. 插入排序

1.算法思想

插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序。


2.c++代码实现

#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;

template<typename T> void insertSort(std::vector<T> & arr) {

for (int i = 1; i < arr.size(); ++i) {

for (int j = i; j > 0; --j) {

if (arr[j] < arr[j - 1])

std::swap(arr[j], arr[j - 1]);

else

break;

}

}

}


int main() {

vector<int> arr{ 4,7,8,3,6,45 };

selectionSort(arr);

for (auto it = arr.begin(); it != arr.end(); it++) {

cout << *it << " ";

}

}


时间复杂度O(N^2)

空间复杂度:O(1)

应用场景:数组中大部分数据都是有序的。(排序日志)



三.快速排序

1.算法思想

该方法的基本思想是:

先从数列中取出一个数作为基准数。

分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

再对左右区间重复第二步,直到各区间只有一个数。  


2.c++代码实现

#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;


template<typename T> int partition(std::vector<T>& arr, int l, int r) {

T v = arr[l];

int j = l;

for (int i = l + 1; i <= r; ++i) {

if (arr[i] < v) {

std::swap(arr[j + 1], arr[i]);

++j;

}

}

std::swap(arr[l], arr[j]);

return j;

}


template<typename T> void quickSort(std::vector<T>& arr,int l,int r) {

if (l >= r)

return;

int p = partition(arr, l, r);

quickSort(arr, l, p - 1);

quickSort(arr, p + 1, r);


}


template<typename T> void quickSort(std::vector<T>& arr) {

quickSort(arr, 0, arr.size() - 1);

}

int main() {

vector<int> arr{ 4,7,8,3,6,45 };

quickSort(arr);

for (auto it = arr.begin(); it != arr.end(); it++) {

cout << *it << " ";

}

}


关注“职坐标在线”(Zhizuobiao_Online)公众号,免费获取学习视频资料、技术就业咨询

C语言/C++学习之排序算法总结以及c++实现源码分享

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved