排序方法是一种基本的、重要的算法,排序的方法有很多,现把一些基本排序方法的算法和c代码列出如下,供大家思考,借鉴,进步。
在进行排序之前首先要做的一件事就是选择排序的准则,即(1)从大到下排列或(2)从小到大排列,在进行排序时就是基于这种准则,这样做的目的是为了避免思路的混乱,清晰的思路是解决问题的第一准则。在选择好排序的准则之后就可以进行排序了。
冒泡排序
冒泡排序的算法是这样的
(1) 数组里的每一个数都要和它以后的数进行比较,若不符合排序的准则这两个数就需要交换,这是在内层循环里做的,这个数在进行比较之后就不需要再次比较了。
(2) 在外层循环里要做的事是控制循环的次数,即需要比较几次,若有n个数,则需要比较n-1次
#include<stdio.h>
int main()
{
int a[10];
int i,j,t;
printf("请输入10个数,每个数之间用空格隔开\n");
for(i=0;i<9;i++)
scanf("%d",&a[i]);
printf("未排序前的数组为\n");
for(i=0;i<10;i++)
printf("%d\t",a[i]);
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("按从小到大顺序排序后的数组为\n");
for(i=0;i<10;i++)
printf("%d\t",a[i]);
getch();
return 0;
冒泡排序是一种效率较低的排序方法,排序所用时间与表长的平方成正比。如果需要排序的表比较长,冒泡排序所花费的时间就很客观。
}
选择排序
选择排序的算法是这样的:
(1)外层循环设置的a[i]为比较的基准值,内层循环a[j]为设置的比较基准值,比较基准值从a[i]以后的之开始,一直到数组的末尾
(2)每次a[i]与a[j]比较时,如果不满足排序的条件,则a[i]与a[j]进行交换,满足排序的条件,则a[i]与a[j]不进行交换,所以这样做之后,每次是a[i]与a[j],每次比较之后a[i]与它前一个数相比,总是按照一定的顺序排好的。下面是选择排序的c代码!
#include<stdio.h>
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};//定义长度为10的数组,并初始化a[0]~a[8],a[9]自动赋0,
int i,j,t;
printf("原数组为:\n");
for(i=0;i<10;i++)
printf("%d\t",a[i]);
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j] =t;
}
}
}
printf("排序后数组为:\n");
for(i=0;i<10;i++)
printf("%d\t",a[i]);
getch();
return 0;
}
选择排序和冒泡排序相比较,选择排序在进行排序时所交换的次数较少,用时较少,效率比较高。是一种快捷的方法。