排序:快速排序,冒泡排序,桶排序,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;
}