-
-
冒泡排序
冒泡排序基本思想:通过一遍一遍相邻数的交换,把最大或最小的数挪到一遍,利用两个for循环进行排序
#include<stdio.h>
int main()
{
intn,a[100],t;
scanf("%d",&n);
for(inti=0;i<n;i++)
scanf("%d",&a[i]);
for(inti=0;i<n-1;i++)
{
for(intj=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(inti=0;i<n;i++)
printf("%2d",a[i]);
return0;
}
-
选择排序
冒泡排序基本思想:从前往后,先找到最小(大)的数,将其储存到第一个数组里面,然后再从剩下的数里面找最小的数,储存到第二个数组里面,依次排序
#include<stdio.h>
int main()
{
intn,a[100],min,t;
scanf("%d",&n);
for(inti=0;i<n;i++)
scanf("%d",&a[i]);
for(inti=0;i<n;i++)
{
for(intj=i;j<n;j++)
{
if(a[j]<a[i])
{
t =a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(inti=0;i<n;i++)
printf("%2d",a[i]);
return0;
}
-
希尔排序
基本思想:选定间隔,然后利用插入排序,把对应间隔的数字进行排序,直到间隔到1停止
#include<stdio.h>
void xe_sort(int a[],int n);
int main()
{
int n,a[1000];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
xe_sort(a,n);
for(int i=0;i<n;i++)
printf("%2d",a[i]);
return 0;
}
void xe_sort(int a[],int n)
{
intgap,i,j;
for(gap=n/2;gap>0;gap/=2)//选定间隔
for(i=0;i<gap;i++)
{
for(j=i;j<n;j+=gap)//利用插入排序把所有间隔为gap的数据排序
{
inttemp=a[j];
int k=j;
if(a[j]<a[j-gap])
{
while(k>0&&temp<a[k-gap])
{
a[k]=a[k-gap];
k-=gap;
}
a[k]=temp;
}
}
}
}
-
快速排序
通过设置一个数,利用一个循环把比这个数小的数都放其左端,把比它大的数都放在其右边,然后重复这个步骤利用递归,最终实现排序。
#include<stdio.h>
void Q_sort(int a[],int n);
int main()
{
int n,a[1000];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
Q_sort(a,n);
for(int i=0;i<n;i++)
printf("%2d",a[i]);
return 0;
}
void Q_sort(int a[],int n)
{
intkey=a[0]; //给key赋值, 对应的以下代码下key的初值为a[0]
inti=0,j=n-1;
if(n>1)//利用递归的出空
{
while(i!=j)
{
for(;i<j;j--)
if(key>a[j])
{
a[i]=a[j];
break;
}
for(;i<j;i++)
if(key<a[i])
{
a[j]=a[i];
break;
}
if(i==j) a[i]=key;//把替换了的key还原
}
Q_sort(a,i); //往前递归
Q_sort(a+i+1,n-i-1); //往后递归
}
}
-
插入排序
基本思想:把一个数插入到已经有序的数列中,直到插完所有的数
#include<stdio.h>
void sort(inta[],int n);
int main()
{
intn,a[1000];
scanf("%d",&n);
for(inti=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,n);
for(inti=0;i<n;i++)
printf("%2d",a[i]);
return0;
}
void sort(inta[],int n)
{
int key,i,j;
for(i=0;i<n;i++)
{
key=a[i];//确定要插入的数
for(j=i;j>0&&a[j-1]>key;j--)
{
a[j]=a[j-1];//为要插入的数留出空隙
}
a[j]=key;//把相应的数插入
}
}