寒假集训的第一天,学长给我们讲了各种排序。我在此应该深重的检讨下我自己,一年前我就把归并排序,桶排序和希尔排序的思路都听明白了,然后用代码实现了之后就打印出来当做固定的模板看着,想想也是很搞笑,哈哈哈哈,以至于到现在过了一年我代码忘得那真的是超级干净......为此我要把这几个排序弄清楚,就有了以下的内容:
1.插入排序
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int a[1000];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int t,j;
for(int i=1;i<n;i++)
{
t = a[i];
for(j = i-1;j>=0&&a[j]>t;j--)
{
a[j+1] = a[j];
}
a[j+1] = t;
}
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;;
}
这个是第一种做法,便利之后,找到位置,然后往后移动
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[1000],i,t,j,m,k,y=0;
int n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
t=a[i];
y=0;
for(j=0;j<i;j++)
{
if(t>a[j])
y++;
}
if(i!=y)
{
int q=a[i];
for(m=i;m>y;m--)
{
a[m]=a[m-1];
}
a[y]=q;
}
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
这个是插入排序的第二种做法。
2.希尔排序
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[1000];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int d = n; d > 0; d = d >> 1)
{
for(int i = 0; i < n; i += d)
{
for(int j = 0; j < i; j++)
{
if(a[j+1]<a[j])
{
swap(a[j],a[j+1]);
}
}
}
}
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
3.选择排序
#include <iostream>
#include <algorithm>
using namespace std;
int a[1000];
int n;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int k;
for(int i=0;i<n-1;i++)
{
k=i;
for(int j = i+1;j<n;j++)
{
if(a[k]>a[j])
k=j;
}
if(k!=i)
{
swap(a[i],a[k]);
}
}
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
4.快速排序
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int a[1001],n;
int q(int left,int right)
{
int l,j,t,temp;
if(left>right)
return 0;
temp=a[left];
l=left;
j=right;
// printf("%d %d",&l,&j);
while(l!=j)
{
while(a[j]>=temp && l<j)
j--;
while(a[l]<=temp && l<j)
l++;
if(l<j)
{
t=a[l];
a[l]=a[j];
a[j]=t;
}
}
a[left]=a[l];
a[l]=temp;
q(left,l-1);
q(l+1,right);
}
int main()
{
int i,j,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
q(1,n);
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
这个是没有归并排序和桶排序的,所以这个是各种排序1.
希望当我下次忘记的时候看到这些内容能想起来些吧!
加油