排序算法汇总及简单实现

本文汇总了各种排序算法,包括插入排序(直接插入、二分插入)、选择排序(直接选择、堆排序)、交换排序(冒泡排序、快速排序)、归并排序(自顶向下、自底向上)以及计数排序。内容涵盖了每种排序算法的基本思想、操作特点和时间复杂度,特别指出快速排序和归并排序在稳定性和效率上的差异。
摘要由CSDN通过智能技术生成

排序算是比较常用的算法之一,其种类也很多,各有特点,统一撸一遍再总结一下加深理解。以下排序统一按照由小到大顺序来排。

插入排序

插入排序就是从未排序数组中选择一个插入到排序数组的合适位置

1.直接插入排序

void insert_sort()
{
	for (int i = 1; i < len; i++)
	{//第一个已经排好
		int j = i;
		int temp = list[i];
		while (j > 0 && temp < list[j - 1])
		{//寻找插入位置
			list[j] = list[j - 1];
			j--;
		}
		list[j] = temp;
	}
}

直接插入排序性质:

1.对于随机排列长度为N且主键不重复的数组,平均情况插入排序需要N^2 / 4次比较以及N^2 / 4次交换;最坏情况下需要N^2 / 2次比较以及N^2 / 2次交换;最好情况下需要N - 1次比较和0次交换。时间复杂度为O(n^2)。

2.运行时间和输入有关,适用于某些类型的非随机数组。

3.对于部分有序的数组十分高效,也很适合小规模数组。

4.稳定性:稳定

2.二分插入排序

void Binary_sort()
{
	for (int i = 0; i < len; i++)
	{
		int low = 0;
		int high = i - 1;
		int temp = list[i];
		while (low <= high)
		{//二分寻找插入位置
			int middle = (low + high) / 2;
			if (list[middle] < temp)
				low = middle + 1;
			else
				high = middle - 1;
		}
		for (int j = i; j > low; j--)
		{//移位
			list[j] = list[j - 1];
		}
		list[j] = temp;
	}
}


3.希尔排序

将数组按照间隔值划分,分别排好序后,再划分,整体将越来越有序

void shell_sort()
{
	int gap = len / 2;
	while (gap)
	{//gap>=1
		for (int i = gap;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值