第一章——排序
排序 | 算法思想 |
---|
桶排序 | 借助一维数组,相当于有10个桶,编号1-10,每出现一个数字就把他放进编号对应的桶当中,最后数对应桶中间有几个数字就可以了 |
| |
冒泡排序 | 相邻比较,逆序交换 |
| 每趟只能将一个数字归位,如果有n个数进行排序,只需要n-1趟; |
| 时间复杂度为O(n^2)** |
快速排序 | 快速排序是每次排序设置一个基准值,把小于基准值的数字放到基准值的左边,吧大于基准值的数字放在基准值的右边 |
| 快速排序交换是跳跃式的,快速排序比冒泡排序而言少了比较和交换次数 , |
| 最坏时间复杂度为O(N^2),平均时间复杂度为O(nlogn) |
简易化的桶排序
#include <cstdio>
int main()
{
int a[11],i,j,t;
for(i=0;i<=10;i++)
{
a[i]=0;
}
for(i=1;i<=5;i++)
{
scanf("%d",&t);
a[t]++;
}
for(i=0;i<=10;i++)
for(j=1;j<=a[i];j++)
printf("%d",i);
return 0;
}
冒泡排序
#include <cstdio>
int main()
{
int a[101],n,i,j,temp;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
快速排序
#include <cstdio>
int a[101],n;
void quicksort(int left,int right)
{
int i,j,t,temp;
if(left>right)
return;
temp=a[left];
i=left;
j=right;
while(i!=j)
{
while(a[j]>=temp&&i<j)
j--;
while(a[i]<=temp&&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);
}
int main()
{
int i,j,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n);
for(i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}