排序法学习1

本部分内容参考了:https://www.cnblogs.com/chenglc/p/7880029.html

摘抄的源码做了一下修改

排序法按照存储分为:内部排序法,外部排序法。

内部排序法分为:插入排序法,选择排序法,交换排序法,归并排序法,基数排序法。

插入排序法分为:直接插入排序法,希尔排序法

选择排序法分为:简答排序法和堆排序法

交换排序法分为:冒泡排序法和快速排序法。

今天讨论插入排序法:

一、直接排序法

升序排序

思路:如果a[i]比a[k]小,则本次不排序,进行下一次循环。如果a[i]比a[k]大,则a[k]插入到a[i]的位置a[i]及其之后的元素后移一位

要点:记录a[i]的临时值,和i值以及数组边界

源码如下:
 

#include <stdio.h>
void print(int *iarry,int n,int i);
void InsertSort(int a[],int n){
	for (int i =1 ;i<n;i++)
	{
		if ( a[i] < a[i-1]){
				int j=i-1;
				int x = a[i];
				while ( x < a[j] )
				{
					a[j+1] = a[j];
					j--;	
					if ( j < 0 )
						break;
				}
				a[j+1]=x;
			}	
			print(a,n,i);
	}
		
} 
void print(int *iarry,int n,int i){
		
		for ( int j=0;j<n;j++)
		{
			printf("%d ",iarry[j]);	
		}
		printf("\n");
}

int main(){

	int iarry[10]={8,1,4,9,5,3,6,7,2,0};
	InsertSort(iarry,10);
	print(iarry,10,10);
	return 0;
}

直插法降序:

#include <stdio.h>
void print(int *iarry,int n,int i);
void InsertSort(int a[],int n){
	for (int i =1 ;i<n;i++)
	{
		if ( a[i] > a[i-1]){
				int j=i-1;
				int x = a[i];
				while ( x > a[j] )
				{
					a[j+1] = a[j];
					j--;	
					if ( j < 0)
						break;
				}
				a[j+1]=x;
			}	
			print(a,n,i);
	}
		
} 
void print(int *iarry,int n,int i){
		
		for ( int j=0;j<n;j++)
		{
			printf("%d ",iarry[j]);	
		}
		printf("\n");
}

int main(){

	int iarry[10]={1,8,4,9,5,3,6,7,2,0};
	InsertSort(iarry,10);
	print(iarry,10,10);
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值