排序那些事(上)

冒泡排序

//冒泡排序
//每一个元素都要与他后面的所有元素进行比较 
#include<stdio.h>
int main(void)
{
	int buf[10]={8,56,7,4,56,77,432,1,3,4};
	for(int i=0;i<9;i++)
	{
		for(int j=i+1;j<10;j++)
		{
			if(buf[i]>buf[j])
			{
				int temp=buf[i];
				buf[i]=buf[j];
				buf[j]=temp;
			}
		 } 
	}
	for(int k=0;k<10;k++)
	{
		printf("%d ",buf[k]);
	}
	return 0;
 } 

选择排序

//选择排序
//在未排好的元素中,选择最小的放在排列好的元素的最后 
#include<stdio.h>
int main(void)
{
	int buf[10]={43,65,7,2,454,23,78,4,32,1};
	int number=0; 
	for(int i=0;i<10;i++)
	{
		number=i;
		for(int k=i+1;k<10;k++)//找到最小的哪一个 
		{
			if(buf[number]>buf[k])
				number=k;
		}
		//将选择的数较小的数拿到i小标对应的数
		int temp=buf[i]; 
		buf[i]=buf[number];
		buf[number]=temp;
	}
	for(int k=0;k<10;k++)
	{
		printf("%d ",buf[k]);
	}
	return 0;
 } 

插入排序

//插入排序
//一个一个插入,每个插入元素前面的数都是有序数列
#include<stdio.h>
int main(void)
{
	int buf[10]={43,34,67,87,65,58,12,43,22,9};
	//一个一个元素的去插
	for(int i=0;i<10;i++) 
	{
		int j=i;
		//将要插入的元素和前面一个一个做比较,因为前面的都是有序数组,比完即插完 
		while(buf[j]<buf[j-1]&&j>0)
		{
			int temp=buf[j];
			buf[j]=buf[j-1];
			buf[j-1]=temp;
			j--;
		}
	}
	for(int k=0;k<10;k++)
	{
		printf("%d ",buf[k]);
	}
	return 0;
 } 

希尔排序

//希尔排序
//关键在于一个增量,将数组按照增量分成若干个小组,在每一个小组中进行插入排序
#include<stdio.h>
int main(void)
{
	int buf[10]={32,65,34,2,6,85,23,76,21,11};
	int zeng=10/2;
	for(int zeng=10/2;zeng>0;zeng/=2) 
	{
		//这里的i++有巧妙之处,它让多个分组交替执行插入排序 
		for(int i=zeng;i<10;i++)
		{
			int j=i;
			//单个分组进行插入排序 
			while(buf[j]<buf[j-zeng]&&j>=zeng)
			{
				int temp=buf[j];
				buf[j]=buf[j-zeng];
				buf[j-zeng]=temp;
				j=j-zeng;
			 } 
		}
	}
	for(int k=0;k<10;k++)
	{
		printf("%d ",buf[k]);
	}
	return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值