数据结构:八大经典排序算法及代码实现

本文详细介绍了八种经典的排序算法:直接插入排序、希尔排序、折半插入排序、简单选择排序、堆排序、冒泡排序、快速排序和归并排序,包括它们的原理、代码实现和时间复杂度分析。这些排序算法在不同场景下有着各自的优缺点,理解它们对于优化算法性能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、插入排序

1、直接插入排序

从第一个元素开始,依次取出,比较取出的元素和其左边的所有元素,如果比左边所有元素大,则直接插入,否则依次将比该元素大的元素向后移动,然后插入即可。

例:原始数据:46 25 31 18 84 18 20 60
【46】 25 31 18 84 18 20 60
【25 46】 31 18 84 18 20 60
【25 31 46】 18 84 18 20 60
【18 25 31 46】 84 18 20 60
【18 25 31 46 84】 18 20 60
【18 18 25 31 46 84】 20 60
【18 18 20 25 31 46 84】 60
【18 18 20 25 31 46 60 84】

#include<stdio.h>
void InsertSort(int k[],int n) //n为元素个数
{
   
	int temp;//temp暂时存储取出的值
	for( int i = 0 ; i < n ; i++ )
	{
   
		if( k[i-1] > k[i] )
		{
   
			temp = k[i];
			//将比第i个元素大的左边所有元素向后移,给此元素找位置
			for( int j = i-1 ; k[j] > temp ; j-- )
			{
   
				k[j+1] = k[j];
			}
			//找到元素位置,插入
			k[j+1] = temp;
		}
	}
}
int main()
{
   
	int a[8]={
   46, 25, 31, 18, 84, 18, 20, 60};
	InsertSort(a,8);
	printf("排序后的结果是:");
	for( int i = 0 ; i < 8 ; i++ )
	{
   
		printf("%d\t",a[i]);
	}
	return 0;
}

时间复杂度: 最好复杂度:O(n);最坏复杂度:O(n2)
平均复杂度:O(n2) 稳定


2、希尔排序

用元素个数除以2或3求得间距d1,从第一个元素开始,每隔d1个间距的元素分为一组,将每组的元素排序,再将d1除以2或3求得间距d2,同上,直到间距变为1。

例:原始数据:46 25 31 18 84 18 20 60
d1=4排完序后 -------- 46 18 20 18 84 25 31 60
d2=2排完序后 -------- 20 18 31 18 46 25 84 60
d3=1排完序后 -------- 18 18 20 25 31 46 60 84

#include <stdio.h>
void InsertSort(int k[], int n)
{
   
	int i, j, temp;
	int d = n;
	do
	{
   
		d = d/2;
		for( i=d; i < n; i++ )
		{
   
			if( k[i-d] > k[i] )
			{
   
				temp = k[i];

				for( j=i-d; k[j] > temp; j-=d )
				{
   
					k[j+d] = k[j];
				}

				k[j+d] = temp;
			}
		}
	}while(d > 1);
}

int main()
{
   
	int i, a[8] = {
   46,25,31,18,84,18,20,60};
	InsertSort(a, 8);
	printf("排序后的结果是:");
	for( i=0; i < 8; i++ )
	{
   
		printf("%d\t",</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值