排序方法



//main.c
#include <iostream>
using namespace std;

extern void InsertSort(int* a, int n);
extern void SelectSort(int* a, int n);
extern void BubbleSort(int* a, int n);
extern void print(int* a,int n, int i);
extern void swap(int* a, int *b);

/*==================================================
//功能:	排序过程打印
//参数:	int* a 数组起始地址;
//			int n;数组总长度;
//			int i 排序的趟数
//返回值:	最小数的下标
/*==================================================*/
void print(int* a,int n, int i)
{
	cout<<"第"<<i+1<<"趟排序";
	for(int i=0; i<n; i++)
	{
		cout<<a[i]<<" ";
	}
	cout<<endl;
}

void swap(int* a, int *b)
{
	*a = *a+*b;
	*b = *a-*b;
	*a = *a-*b;
}



int main(void)
{
	int a[] = {1,2,9,3,0,8,4,7,3,6,12,342,323,42,1,21,34,9};
	print(a,sizeof(a)/sizeof(int),-1);
	BubbleSort(a,sizeof(a)/sizeof(int));
	print(a,sizeof(a)/sizeof(int),-1);
	system("pause");
	return 0;
}


//bubble.c
#include <iostream>

using namespace std;
extern void BubbleSort(int* a, int n);
extern void print(int* a,int n, int i);
extern void swap(int* a, int *b);

/*==================================================
//功能:	冒泡排序	
//			依次选取最大数到结尾位置来排序
//参数:	int* a 数组起始地址;
//			int n;数组总长度;
//返回值:
/*==================================================*/
void BubbleSort1(int* a, int n)
{
	for(int i=0; i<n; i++)
	{
		for(int j=0; j<n-1; j++)
		{
			if(a[j] > a[j+1])
			{
				swap(&a[j], &a[j+1]);
			}
		}
		print(a,n,i);
	}
}

/*==================================================
//功能:	冒泡排序	
//			依次选取最大数到结尾位置来排序
//参数:	int* a 数组起始地址;
//			int n;数组总长度;
//返回值:
/*==================================================*/
void BubbleSort2(int* a, int n)
{
	int k = 1;
	for(int i=0; i<n-1 && k==1; i++)
	{
		k=0;
		for(int j=0; j<n-i-1; j++)
		{
			if(a[j] > a[j+1])
			{
				k=1;
				swap(&a[j], &a[j+1]);
			}
		}
		print(a,n,i);
	}
}


/*==================================================
//功能:	冒泡排序	
//			依次选取最大数到结尾位置来排序
//参数:	int* a 数组起始地址;
//			int n;数组总长度;
//返回值:
/*==================================================*/
void BubbleSort3(int* a, int n)
{
	int j = n-1;
	while(j>0)
	{
		int pos = 0;
		for(int i=0; i<j-1; i++)
		{
			if(a[i] > a[i+1])
			{
				pos = i;
				swap(&a[i], &a[i+1]);
			}
		}
		j = pos;
		print(a,n,j);
	}
}

/*==================================================
//功能:	冒泡排序	
//			依次选取最大数到结尾位置来排序
//参数:	int* a 数组起始地址;
//			int n;数组总长度;
//返回值:
/*==================================================*/
void BubbleSort(int* a, int n)
{
	int high = n-1;
	int low = 0;
	while(high>low)
	{
		int iPosHigh = 0;
		int iPosLow = 0;
		for(int i=low; i<high; i++)
		{
			if(a[i] > a[i+1])
			{
				iPosHigh = i;
				swap(&a[i], &a[i+1]);
			}
		}
		high = iPosHigh;
		
		for(int i=high;i>low; i--)
		{
			if(a[i] < a[i-1])
			{
				iPosLow = i;
				swap(&a[i], &a[i-1]);
			}
		}
		low = iPosLow;
		print(a,n,high);
	}
}





//select.c
<pre name="code" class="cpp">#include <iostream>
using namespace std;
extern void print(int* a,int n, int i);
extern void swap(int* a, int *b);

extern void SelectSort(int*a, int n);
/*=========================================
//第0趟排序1 2 9 3 0 8 4 7 3 6 
//第1趟排序0 2 9 3 1 8 4 7 3 6 
//第2趟排序0 1 9 3 2 8 4 7 3 6 
//第3趟排序0 1 2 3 9 8 4 7 3 6 
//第4趟排序0 1 2 3 9 8 4 7 3 6 
//第5趟排序0 1 2 3 3 8 4 7 9 6 
//第6趟排序0 1 2 3 3 4 8 7 9 6 
//第7趟排序0 1 2 3 3 4 6 7 9 8 
//第8趟排序0 1 2 3 3 4 6 7 9 8 
//第9趟排序0 1 2 3 3 4 6 7 8 9 
/*==========================================*/
/*==================================================
//功能:	
//描述:	查找到最小数的下标
//参数:	int* a 数组起始地址;
//			int n;数组总长度;
//			int i 要开始查找的起始下标
//返回值:	最小数的下标
/*==================================================*/
int SelectMinKey(int* a,int n,int i)
{
	int j = i;
	for(int k=i+1; k<n; k++)
	{
		if(a[k] < a[j])
		{
			j = k;
		}
	}
	return j;
}

/*==================================================
//功能:	选择排序	
//描述:	依次选取最小/大数放到查找的起始位置
//参数:	int* a 数组起始地址;
//			int n;数组总长度;
//返回值:
/*==================================================*/
void SelectSort(int* a, int n)
{
	int t;
	for(int i=0; i<n-1; i++)
	{
		t = SelectMinKey(a,n,i);
		if(t != i)
		{
			swap(&a[i], &a[t]);
		}
		print(a,n,i);
	}
}


 

//insert.c
<pre name="code" class="cpp">#include <iostream>

using namespace std;

extern void InsertSort(int* a, int n);



extern void print(int* a,int n, int i);

/*=============================================
//第1趟排序1 2 9 3 0 8 4 7 3 6
//第2趟排序1 2 9 3 0 8 4 7 3 6
//第3趟排序1 2 3 9 0 8 4 7 3 6
//第4趟排序0 1 2 3 9 8 4 7 3 6
//第5趟排序0 1 2 3 8 9 4 7 3 6
//第6趟排序0 1 2 3 4 8 9 7 3 6
//第7趟排序0 1 2 3 4 7 8 9 3 6
//第8趟排序0 1 2 3 3 4 7 8 9 6
//第9趟排序0 1 2 3 3 4 6 7 8 9
/*============================================*/
/*==================================================
//功能:	插入排序
//描述:	将较大数依次后移,较小数插入到较大数前面
//参数:	int* a 数组起始地址;
//			int n;数组总长度;
//返回值:
/*==================================================*/
void InsertSort(int* a,int n)
{
	for(int i=1; i<n; i++)
	{
		if(a[i-1] > a[i])
		{
			int filter = a[i];
			int j = i-1;
			while(filter < a[j] && j>=0)
			{
				a[j+1] = a[j];
				j--;
			}
			a[j+1] = filter;
		}
		print(a,n,i-1);
	}
}



 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZenZenZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值