直接插入排序,折半插入排序和冒泡排序思想以及实现(c语言)

本文介绍了三种经典的排序算法:直接插入排序、折半插入排序和冒泡排序。直接插入排序通过依次与前面已排序元素比较并插入合适位置;折半插入排序利用折半查找优化了插入位置的确定;冒泡排序通过相邻元素的不断交换,将最大(或最小)元素逐步推向序列末尾。每种算法都提供了C语言实现。
摘要由CSDN通过智能技术生成

直接插入排序

算法思想:
直接插入排序的基本操作是将第 i 个记录插入到前面 i-1 个已经排好序的记录中。

具体过程为:将第 i 个记录的关键字 K 依次与前面排好序的关键字比较,如果比较的关键字大于 K ,则将该关键字后移一位,直至遇到小于 K 的关键字或到序列头部,然后将 K 插入到该关键字后面或序列头部(之前比较过的已经后移一位,所以会留有一个空位置供 K 插入)。

算法描述:

void InSort(RecordType r[],int length)
//length 为数组中待排序记录的数目
{
for(i = 2;i<=length;i++)
{
r[0] = r[i];//r[0]为监视哨
j = i -1;
while(r[0].key<r[j].key)//寻找插入位置
{
r[j+1] = r[j];
j = j-1;
}
r[j+1] = r[0];//将待插入记录插入到已排序的序列中
}
}

完整代码:

#include<stdio.h>
void insSort(int a[],int lengh){
   
	int i = 1;//i从数组的第二个位置开始,前面只有一个数,所以是排好序的
	for(;i<lengh;i++){
   
		int x = a[i];//x为监视哨,记录待插入的关键字值
		int j = i-1;//j = j-1 --> 要和关键字x比较的是 i 之前的序列
		while(x<a[j]){
   
			a[j+1] = a[j];//大于x就后移
			j--;
		}
		a[j+1] = x;//将关键字插入到空位置
	}
}
int main()
{
   
	int a[] = {
   48,62,35,77
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值