-
冒泡排序
#include <iostream>
#include <cstdio>
using namespace std;
struct student
{
char name[21];
int score;
};
int main()
{
student a[100],t;
int i,j,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s %d",a[i].name,&a[i].score);
//核心代码
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j].score<a[j+1].score)
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
for(i=0;i<n;i++)
{
printf("%s\n",a[i].name);
}
return 0;
}
-
双向冒泡排序
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n,lowpos,highpos,low,high,i,j,t;
int a[100];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
//核心代码
low=0;high=n-1;
while(low<high)
{
highpos=high;//设置未排序序列的最后一个元素位置
for(i=low;i<highpos;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
high=i;//记录交换位置
}
}
if(high==highpos)//若未进行交换操作,说明排序已经完成
break;
lowpos=low;//设置未排序序列的第一个元素位置
for(i=high;i>lowpos;i--)
{
if(a[i]<a[i-1])
{
t=a[i];
a[i]=a[i-1];
a[i-1]=t;
low=i;//记录交换位置
}
}
if(low==lowpos)//若未进行交换操作,说明排序已经完
break;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
-
选择排序
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a[100],n,i,j,t;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//核心代码
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
-
快速排序
#include<iostream>
#include<cstdio>
using namespace std;
int a[100],n;
//核心函数
void quicksort(int left,int right)
{
int t,l,r,base;
if(left>right)
return;
base=a[left];l=left;r=right;
while(l!=r)
{
while(a[r]>=base&&l<r)
r--;
while(a[l]<=base&&l<r)
l++;
if(l<r)
{
t=a[l];
a[l]=a[r];
a[r]=t;
}
}
a[left]=a[l];
a[l]=base;
quicksort(left,l-1);
quicksort(l+1,right);
return ;
}
int main()
{
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
quicksort(0,n-1);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
注:四种排序方法各有优缺点,根据实际情况选择性使用,降低时间复杂度和代码的复杂程度
转载请注明出处:https://blog.csdn.net/wangws_sb/article/details/81561844