Acm4-排序汇总

排序:快速排序,冒泡排序,桶排序,sort函数排序

微笑快速排序

#include<stdio.h>
int a[100];
void quicksort(int left,int right)
{
    int t,temp,i,j;//i表示左世兵,j表示右士兵
    if(left>right)
        return ;
    i=left;
    j=right;
    temp=a[left];
    while(i!=j)
    {
      while(temp<=a[j]&&i<j)
          j--;
      while(temp>=a[i]&&i<j)
          i++;
        if(i<j)
        {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
    a[left]=a[i];
    a[i]=temp;
    quicksort(left,i-1);
    quicksort(i+1,right);
    return ;
}
int main()
{
    int n,i;
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        quicksort(0,n-1);
        for(i=0;i<n-1;i++)
            printf("%d ",a[i]);
        printf("%d\n",a[n-1]);
    }
    return 0;
}





2.桶排序

作用:先去重再排序

#include<stdio.h>
int main()
{
    int a[100];
    int i,n,t;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&t);
        a[t]=1;
    }
    for(i=0;i<n;i++)
     if(a[i])
         printf("%d ",i);
    getchar();
    getchar();
}

安静:通排序的缺点:时空复杂度都不理想,不适用大数据

微笑sort方法排序和a[i]==a[i-1];

适用:先排序再去重

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    int a[1000],i,n;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    sort(a,a+n);
    printf("%d ",a[0]);
    for(i=1;i<n;i++)
    {
      if(a[i]!=a[i-1])
      {
          printf("%d ",a[i]);
      }
    }
    return 0;
}

微笑冒泡排序

//从小到大排序 
#include<iostream>
using namespace std;
const int Max=100;
int arr[Max];
void BubbleSort(int n)
{
   for(int i=0;i<n;i++)
   {
      for(int j=0;j<=i;j++)
	  {
	   	if(arr[i]<arr[j])
		   {
		     int t=arr[i];
			 arr[i]=arr[j];
			 arr[j]=t;	
		   } 
	  }	
   }	
}
int main()
{
   int n;
   cin>>n;
   for(int i=0;i<n;i++)
   cin>>arr[i];
   BubbleSort(n);
   for(int i=0;i<n;i++)
   cout<<arr[i]<<" ";
   cout<<endl; 
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值