常见的几种Sort排序算法

本文介绍了排序的基本概念,分类以及包括插入排序、选择排序、堆排序、冒泡排序和快速排序在内的五种常见排序算法的详细解释和实现。通过对每种排序算法的思想、过程和代码实现的描述,帮助读者理解排序算法的工作原理。
摘要由CSDN通过智能技术生成

  几种常见的Sort排序算法

1. 排序的基本概念

n个记录的序列,其相应关键字的序列是,相应的下表序列是。通过排序,要求找出当前下标序列的一种排列,使得相应的关键字满足如下的非递减(或非递增)关系:,这样就得到一个按关键字有序的记录序列。该文主要是以升序为例。

2. 排序的分类

常见的Sort排序可分为如下几种:

3. 几种排序算法的具体介绍与实现

(1)直接插入排序
插入排序的基本思想是:在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序插入到已排好序的记录子集中,直到将所有待排记录全部插入为止。
直接插入排序的算法思想是:将第i个记录插入到前面的i-1个已排好序的记录中。
具体过程为:将第i个记录的关键字,顺序与其前面记录的关键字进行比较,将所有关键字大于的记录依次向后移动一个位置,直到遇到一个关键字小于或等于的记录,此时该记录后面一定有空位置,将第i个记录插入到该空位置即可。
代码实现:
#include 
    
    
     
     
#include 
     
     
      
      
using namespace std;

void Printf(int* a,size_t n)
{
	for (size_t i = 0; i < n; ++i)
	{
		cout << a[i] << " ";
	}
	cout << endl;
}

void InsertSort(int* a, size_t n)
{
	assert(a);
	for (int i = 0; i < n - 1; ++i)
	{
		int end = i;
		int tmp = a[end + 1];
		for (; end >= 0; --end)
		{
			if (a[end] > tmp)
			{
				a[end + 1] = a[end];
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
}

void TestInsertSort()
{
	int a[] = { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
	Printf(a, sizeof(a) / sizeof a[0]);
	InsertSort(a, sizeof(a) / sizeof a[0]);
	Printf(a, sizeof(a) / sizeof a[0]);
}

     
     
    
    
运行结果:


(2)希尔排序
算法思想:希尔排序又称缩小增量排序法,是一种基于插入思想的排序方法,将待排序的关键字序列分为若干个较小的子序列,对子序列进行直接插入排序,使整个待排序列排好序。
可分为两步:(a)预排序
                        (b)插入排序


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值