栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

手撕代码 --排序算法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

手撕代码 --排序算法

1.快排

快排的思想:随机选取一个数字,数字的右边都比这个数字小,数字的左边都比这个数大。
快排

int partition(int A[],int left,int right)
{	
	int temp=A[left];
	while(left
		while(lefttemp)right--;
		A[left]=A[right];
		while(left
	if(left
		int pos=partition(A,left,right);
		quicksort(A,left,pos-1);	//对左子区间递归进行快速排序
		quicksort(A,pos+1,right);	//对右子区间递归进行快速排序
	}
}


2.归并排序

二路归并排序:
1.将序列两两分组,就可以得到n/2个组,组内单独排序,然后再将这些组两两合并。
递归方案

const int maxn=100;
void  merger(int A[],int l1,int r1,int l2,int r2)
{
	int i=l1,j=l2;
	int temp[maxn];
	int index=0;
	while(i<=r1&&j<=r2)
	{
		if(A[i]
			temp[index++]=A[i++];
		}else
		{
			temp[index++]=A[j++];
		}
	}
	while(i<=r1)temp[index++]=A[i++];
	while(i<=r2)temp[index++]=A[j++];
	for(i=0;i
		A[l1+1]=temp[i];
	}
}

void mergersort(int A[],int left,int right)
{
	if(left>right)return;
	int mid=left+(right-left)/2;
	mergersort(A,left,mid);
	mergersort(A,mid+1,right);
	merge(A,left,mid,mid+1,right);
}

非递归版本

void mergeSort(int A[])
{
	//step为组内元素,step/2为左区间元素个数
	for(int step=2;step/2<=n;step*=2)
	{
	//每step个元素为一组,组内前 step/2 个元素 和 后step/2个元素进行合并
		for(int i=1;i<=n;i+=step)
		{
			int mid=i+step/2-1;
			if(mid+1<=n)
			{
				merge(A,i,mid,mid+1,min(i+step-1,n));
			}
		}	
	}
}

如果只要求给出归并排序每一趟结束时的序列

void mergeSort(int A[])
{
	//step为组内元素,step/2为左区间元素个数
	for(int step=2;step/2<=n;step*=2)
	{
	//每step个元素为一组,组内前 step/2 个元素 和 后step/2个元素进行合并
		for(int i=1;i<=n;i+=step)
		{
			sort(A+i,A+min(i+step,n+1));
		}	
	}
}
3.选择排序

每一趟从待排序的部分[i,n]中选择最小的元素,然后与A[i]进行交换

void selectsort()
{
	for(int i=1;i<=n;i++)
	{
		int k=i;
		for(int j=i;j<=n;j++)
		{
			if(A[j]	
				k=j;
			}
		}
		int temp=A[i];
		A[i]=A[k];
		A[k]=temp;
	}
}
4.插入排序

A[0,i-1]有序,将i插入

int A[maxn],n;
void insertSort()
{
	for(int i=2;i<=n;i++)
	{
		int temp=A[i],j=i;
		while(j>1&&temp
			A[j]=A[j-1];
			j--;
		}
		A[j]=temp;
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034713.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号