经典排序算法C++实现(10种)


本文总结了10中排序算法
下述两张图片来自链接:https://www.cnblogs.com/onepixel/p/7674659.html
十种排序算法结构图:
十种排序算法的时间复杂度
鉴于维基百科中对于每个排序都进行了详细的描述,同时有动态图进行展示,就不详细的介绍了,每个排序都附加了维基百科链接;

插入排序

插入排序维基百科链接
插入排序说白了就是建一个已经排好序的数组,然后把原数组中的值一个一个的往新数组里边插;他的平均时间复杂度是o( n 2 n^2 n2),最好的情况是o(n);
C++代码实现

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> InsertionSort(vector<int> data) {
   
	int len = data.size();
	vector<int> sortdata;
	sortdata.push_back(data[0]);
	for (int i = 1; i < len; i++) {
   
		sortdata.push_back(data[i]);
		for (int j = sortdata.size()-2; j >=0 ; j--) {
   
			if (sortdata[j+1] < sortdata[j]) {
   
				swap(sortdata[j], sortdata[j + 1]);
			}
			else
				continue;
		}
	}
	return sortdata;	
	
}
int main() {
   
	vector<int> data;
	for (int i = 0; i < 10; i++) {
   
		data.push_back(rand() % 101);
	}
	cout << "未进行排序时的数组为:";
	for (int i = 0; i < 10; i++) {
   
		cout << data[i] << ' ';
	}
	cout << '\n';
	data=InsertionSort(data);
	cout << "排序结束后:";
	for (int i = 0; i < data.size(); i++)
	{
   
		cout << data[i] << ' ';
	}
	return 0;
}

在这里插入图片描述

希尔排序(缩小增量排序)

希尔排序维基百科链接
希尔排序是插入排序的一种,核心思想就是先将整个待排数组进行分割(gap=length/2),先小范围的进行插入排序,然后再分割,,,,,,等到分割次数足够小( g a p n e w gap_{new} gapnew=( g a p b e f o r e / 2 gap_{before}/2 gapbefore/2))时直接进行一次插入排序
C++代码实现

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void ShellSort(vector<int>& data) {
   
	int len = data.size();
	for (int gap = len / 2; gap > 0; gap /= 2) {
   //将待排数组进行切割
		//cout << "gap is"<<gap<<'\n';
		for (int i = 0; i < gap; i++)//开始进行插入排序
		{
   
			for (int j = i + gap; j < len; j+=gap) {
   
				if (data[i] > data[j]) {
   
					swap(data[i], data[j]);
					
				}
				int k = j - gap;
				if (k >= 0 && data[k] > data[j])
					swap(data[k], data[j]);
				
			}
		}
	}
}
int main() {
   
	vector<int> data;
	for (int i = 0; i < 10; i++) {
   
		data.push_back(rand() % 101);
	}
	cout << "原始数据为:";
	for (int i = 0; i < 10; i++) {
   
		cout << data[i] << ' ';
	}
	cout << '\n'<<"希尔排序结果为:";
	ShellSort(data);
	for (int i = 0; i < 10; i++) {
   
		cout << data[i] << ' ';
	}
	cout << '\n';

	return 0;
}

结果展示

选择排序

选择排序维基百科链接
选择排序的时间复杂度最坏是O( n 2 n^2 n2),最好是O( n 2 n^2 n2),平均是O( n 2 n^2 n2),选择排序是一种简单直观的排序算法。
算法思想如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
C++代码实现

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void SelectSort(vector<int>& data);
int main() {
   
	vector
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
十大经典排序算法中的三排序算法分别是冒泡排序、希尔排序和选择排序。 冒泡排序是一简单直观的入门排序算法,其原理是从第一个元素开始,与后面的元素逐个比较,如果顺序不对就交换,直到没有可比较的元素为止。 希尔排序是插入排序的一高效改进版本,也称为“缩小增量排序”。该算法将记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量的逐渐减小,每组包含的关键词越来越多,当增量减至1时,整个文件被分成一组,排序完成。 选择排序是基于冒泡排序的优化,减少了交换的次数。每次遍历后找出最小/最大的元素,然后与第一个元素交换,再从剩下的元素中重复这个过程。 以上是关于冒泡排序、希尔排序和选择排序的简要介绍。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [c++十大经典排序算法](https://blog.csdn.net/zhoujiajie0521/article/details/122183332)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [十大经典排序算法C++)](https://blog.csdn.net/qq_52639492/article/details/122106147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值