排序

<pre name="code" class="cpp"><span style="font-size:18px;">#include <iostream>
#include <time.h>
#include <algorithm>
using namespace std;

void BubbleSort(int a[],int len)
{
	int tag=0;
	int count=0;
	for(int i=0;i<len;i++)//n趟
	{
		tag=0;
		for(int j=len-1;j>i;j--)
		{
			if(a[j]<a[j-1])
			{
				int tmp=a[j];
				a[j]=a[j-1];
				a[j-1]=tmp;
				tag=1;
			}
		}
		if(tag==0)
			break;
		//cout<<++count<<endl;
	}
}
//按照定义写,比较麻烦
void InsertSort(int a[],int len)
{
	for(int i=1;i<len;i++)
	{
		int j=i-1;
		while(j>=0)
		{
			if(a[i]>a[j])
				break;
			else
				j--;
		}
		if(j!=i-1)
		{
			int k=i;
			int tmp=a[i];
			for(k=i;k>j;k--)
			{
				a[k]=a[k-1];
			}
			a[j+1]=tmp;
		}
	}
}
//改进一点
void InsertSort1(int a[],int len)
{
	for(int i=1;i<len;i++)
	{
		int j=i-1;
		int tmp=a[i];
		while(tmp<a[j] && j>=0)
		{
			a[j+1]=a[j];
			j--;
		}
		a[j+1]=tmp;
	}
}
void ShellSort(int a[],int len)
{
	int gap=len/2;
	for(gap=len/2;gap>0;gap=gap/2)
	{
		for(int i=0;i<gap;i++)//按组,共有gap组
		{
			for(int j=i+gap;j<len/gap;j=j+gap)//对每一组插入排序
			{
				int k=j-gap;
				//1、找到要插入的点
				while(k>=i)
				{
					if(a[j]>a[k])
						break;
					else
						k=k-gap;
				}
				//2、插入
				if(k!=j-gap)
				{
					int tmp=a[j];
					for(int t=j;t>k;t=t-gap)
					{
						a[t]=a[t-gap];
					}
					a[k+gap]=tmp;
				}
			}
		}
	}
}
void ShellSort1(int a[],int len)
{
	int gap;
	for(gap=len/2;gap>0;gap=gap/2)
	{
		for(int k=0;k<gap;k++)//共有gap个组
		{
			for(int i=k+gap;i<len/gap;i=i+gap)
			{
				int j=i-gap;
				int tmp=a[i];
				while(tmp<a[j] && j>=k)
				{
					a[j+gap]=a[j];
					j=j-gap;
				}
				a[j+gap]=tmp;

			}
		}
	}
}
void QuickSort(int a[],int low,int high)
{
	
	if(low<high)//递归终止条件
	{
		int i,j;
		 i=low;
		j=high;
		while(i!=j)
		{
			if(i<j)//i在前面,抓大放小
			{
				if(a[i]>a[j])
				{
					swap(a[i],a[j]);
					swap(i,j);
					j++;
				}
				else
				{
					j--;
				}

			}
			if(i>j)//i在后面,抓小放大
			{
				if(a[i]<a[j])
				{
					swap(a[i],a[j]);
					swap(i,j);
					j--;
				}
				else
				{
					j++;
				}
			}

		}
		QuickSort(a,low,i-1);
		QuickSort(a,i+1,high);
	}


}
void SelectSort(int a[],int len)
{
	int min=a[0],pos=0;
	int i=1,k=0;
	for(i=0;i<len;i++)
	{
		min=a[i];
		pos=i;
		for(int j=i;j<len;j++)//i-len找最小值
		{
			
			if(a[j]<min)
			{
				min=a[j];
				pos=j;
			}
		}
		swap(a[i],a[pos]);
		
	}
}
//将有二个有序数列a[low...mid]和a[mid...high]合并。 
void MergeArray(int a[],int low,int mid,int high)
{
	int *tmp=new int[high+1];
	int i=low,j=mid+1,k=0;
	while(i<=mid && j<=high)
	{
		if(a[i]<a[j])
		{
			tmp[k++]=a[i++];
		}
		else
			tmp[k++]=a[j++];
	}
	while(i<=mid)
		tmp[k++]=a[i++];
	while(j<=high)
		tmp[k++]=a[j++];
	for(i=0;i<k;i++)
	{
		a[i+low]=tmp[i];
	}
}

void MergeSort(int a[],int low,int high)
{
	if(low<high)
	{
		int mid=(low+high)/2;
		MergeSort(a,low,mid);
		MergeSort(a,mid+1,high);
		MergeArray(a,low,mid,high);
	}
}


void main()
{
	srand((unsigned)time(0));
	int a[100];
	for(int i=0;i<100;i++)
	{
		a[i]=rand()%100;
		
	}
	
	
	//BubbleSort(a,100);
	//InsertSort1(a,100);
	//ShellSort1(a,100);
	//QuickSort(a,0,99);
	//SelectSort(a,100);
	MergeSort(a,0,99);
	for(int i=0;i<100;i++)
	{
		if(i%5==0)
			cout<<endl;
		cout<<a[i]<<' ';
	}
	system("pause");
}
</span>



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值