C语言排序方法

在C语言中有三种排序方法,分别是:冒泡排序,简单选择排序,计数排序。下面分别对这2种排序方法进行介绍。

1. 冒泡排序

冒泡排序实际上就是交换,当相邻两元素逆序时,交换两元素的位置。具体思路(对数组进行升序排列):
第一趟:从第零个元素开始,相邻两元素逆序时交换位置,直到将最大元素放到第n-1个位置上。
第二趟:从第零个元素开始,相邻两元素逆序时交换位置,直到将最大元素放到第n-1个位置上。
...

2. 简单选择排序(降序)

简单选择排序实际上就是假设第i个(i=0,1,2,3...)元素最大,在之后其余元素中找到实际最大的元素,与之交换位置。
第一趟:从第0个元素开始,经过n-1次比较,找出最大值,并与第0个元素交换位置。
第二趟:从第1个元素开始,经过n-2次比较,找出最大值,并与第一个元素交换位置。
. . .

下面有个例子来做具体说明

#include<stdio.h>
#define N 20
main()
{
int a[N],n,i,j,t,k;
printf("请输入n:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
/*for(i=0;i<n;i++)
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;
}
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[i]<a[j])
k=j;
if(a[k]!=a[i])
{
t=a[i];
a[i]=a[k];
a[k]=t;
} //冒泡排序
}*/
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[i]<a[j])
k=j;
if(a[k]!=a[i])
{
t=a[i];
a[i]=a[k];
a[k]=t;
} //简单排序
}
for(j=0;j<n;j++)
printf("%5d",a[j]);
printf("\n");
}

因计数排序不太使用,这里不做详细说明。

posted @ 2016-05-10 20:07  彼时花开  阅读(323)  评论(0)    收藏  举报