一、冒泡排序
这是所有排序算法里面最简单的最基础的。它的核心思想是,相邻列逆序交换。他有三个特点,最容易实现、最具稳定性、数量很多的数,效率低。
int main()
{int i,j,n,t,flag;
int a[10];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{flag=1; /*用于检验是否已排序完成*/
for(j=0;j<n-1-i;j++)
{if(a[j]>a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
flag=0;
}
}
if(flag=1)
break;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
二、选择排序
这也是一种简单直观的排序算法。它的核心思想是,如果从小到大排列的话,先找出最小的一个,再找到第二小的,然后再找到第三小的,,,依次放在前面,从大到小的,反之。它的特点是,较容易实现,不具稳定性,较好的效率。
#include <stdio.h>
int main()
{int i,j,k,n,t;
int a[20]={0};
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
{if(a[k]>a[j])
k=j;
} //与后面的逐一比较,找出最值
if(k!=i) //判断现在的k是否发生变化
{t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
三、插入排序
这是一种较前两种更复杂的排序算法,它的核心思想是第一个元素已被排序,取出下一个元素,在已排序的数中插入。他不是适用于数据量比较大的排序,对于小的比较合适,广泛用于工业排序。
#include <stdio.h>
int main()
{int i,j,k,m,n,t,cha;
int a[20];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{m=i+1;
for(j=0;j<=i;j++)
{if(a[m]<a[j])
{cha=a[m];/*找出合适的位置*/
for(k=m;k>j;k--)
a[k]=a[k-1];/*腾出空位*/
a[j]=cha;/*插入其中*/
break;/*跳出循环,否则还有其他较大的数*/
}
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
网友评论