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

(归并,快速,希尔,堆排序)排序代码实现

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

(归并,快速,希尔,堆排序)排序代码实现

排序
    • 归并排序
      • 应用:
    • 快速排序
    • 希尔排序
    • 堆排序(建大堆)朗

归并排序
#include
using namespace std;
int a[100],n;
long long ans;
void hebing(int low,int mid,int high)
{
	int b[100],k=0,j=mid+1,i=low;
	while(i<=mid&&j<=high)
	{
		if(a[i]<=a[j]) b[k++]=a[i++];
		else  b[k++]=a[j++],ans+=mid-i+1;
	}
	while(i<=mid)  b[k++]=a[i++];
	while(j<=high) b[k++]=a[j++];
	for(int i=low,k=0;i<=high;i++,k++)  a[i]=b[k];
}
void guibing(int low,int high)
{
	int mid;
	if(low
		mid=(high+low)/2;
		guibing(low,mid);
		guibing(mid+1,high);
		hebing(low,mid,high);
	}
}
int main()
{
	scanf("%d",&n); 
    for(int i=1;i<=n;i++)
    	scanf("%d",&a[i]);
	guibing(1,n);
	cout< 
应用: 

洛谷1908逆序对
AC代码:

#include
using namespace std;
int a[100],n;
long long ans;
void hebing(int low,int mid,int high)
{
	int b[100],k=0,j=mid+1,i=low;
	while(i<=mid&&j<=high)
	{
		if(a[i]<=a[j]) b[k++]=a[i++];
		else  b[k++]=a[j++],ans+=mid-i+1;
	}
	while(i<=mid)  b[k++]=a[i++];
	while(j<=high) b[k++]=a[j++];
	for(int i=low,k=0;i<=high;i++,k++)  a[i]=b[k];
}
void guibing(int low,int high)
{
	int mid;
	if(low
		mid=(high+low)/2;
		guibing(low,mid);
		guibing(mid+1,high);
		hebing(low,mid,high);
	}
}
int main()
{
	scanf("%d",&n); 
    for(int i=1;i<=n;i++)
    	scanf("%d",&a[i]);
	guibing(1,n);
	cout< 
快速排序 
#include
using namespace std;
int n,a[10000];
void qsort(int a[],int x,int n)
{
	if(x
	int low=x,high=n,mid=a[x];
	while(low
	while(low
		a[low]=a[high];
		low++;
	}
	while(low
		a[high]=a[low];
		high--;
	}
	}
	a[low]=mid;
	qsort(a,1,low-1);
	qsort(a,low+1,n);
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	qsort(a,1,n);
	for(int i=1;i<=n;i++)
	cout< 
希尔排序 
#include
using namespace std;
#define max 0x7ffffff
int a[max],gap,i;
int main()
{
	cin>>a[i]; while(a[i]) cin>>a[++i];
	for(int j=1;j<=3;j++)
	{
		cin>>gap;
		for(int k=0;k
			int end=k;
			int tem=a[end+gap];
			while(end>=0)
			{
				if(tem
					a[end+gap]=a[end];
					end-=gap;
				}
				else break;
			}
			a[end+gap]=tem;
		}
		for(int k=0;k<=i-1;k++)
		cout< 
堆排序(建大堆)朗 
#include
using namespace std;
#define Max 0x7ffffff
int a[Max],n,i=1;
//向下调整算法(建大堆) 
void AdjustDown(int arr[], int size, int root){
    int j = 2 * root,flag=0;
    while(j<=size && !flag)
    {
    	if(j+1<=size && arr[j+1]>arr[j])
    	j+=1;
    	if(arr[root]>arr[j])
    	flag=1;
    	else
    	{
    		swap(arr[j],arr[root]);
    		j=2*j;
    	}
	}
//建立大堆 
void CreateHeap(int arr[], int size){
    for (int i = size / 2; i >= 1; i--){
         AdjustDown(arr, size, i);
    }
}
void HeapSort(int arr[], int size)
{
	//建立初始大堆 
	CreateHeap(arr, size);
	//打印出大根堆 
	for(int k=1;k<=size;k++)
			cout<=2; i--){
        swap(arr[1], arr[i]);
        AdjustDown(arr, i-1, 1);
        //打印每一趟的结果 
        for(int k=1;k<=size;k++)
			cout<
	cin>>a[i]; while(a[i]) cin>>a[++i];
	HeapSort(a,i-1);
	return 0;
}
//8 3 6 1 68 12 0
//68 8 12 1 3 6
//12 8 6 1 3 68
//8 3 6 1 12 68
//6 3 1 8 12 68
//3 1 6 8 12 68
//1 3 6 8 12 68 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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