background image

语言数组排序小结

让我们先定义一个整型数组 a[n],下面用五种方法对其从小到大排序。

1 “

) 冒泡法

冒泡法大家都较熟悉。其原理为从 a[0]开始,依次将其和后面的元素比较,

若 a[0]>a[i],则交换它们,一直比较到 a[n]。同理对 a[1],a[2],...a[n-1]处理,
即完成排序。下面列出其代码:

void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/
{

int i,j,temp;
for(i=0;i<n-1;i++)

for(j=i+1;j<n;j++) /*注意循环的上下限*/

if(a[i]>a[j]) {

temp=a[i];
a[i]=a[j];
a[j]=temp;

}

}

/*冒泡排序 2:
  

“ ”

 

将数组中的每相邻的两个数进行比较, 泡 在后面 */

void bubble2(int a[],int n) /*定义两个参数:数组首地址与数组大小*/
{
  int i,j,temp;
  for(i=1;i<n;i++)
    for(j=0;j<n-i;j++)
      if(a[j]>a[j+1])
      {
        temp=a[j];
        a[j]=a[j+1];
        a[j+1]=temp;
      }
}
冒泡法原理简单,但其缺点是交换次数多,效率低。

下面介绍一种源自冒泡法但更有效率的方法 选择法 。

2 “

) 选择法

选择法循环过程与冒泡法一致,它还定义了记号 k=i,然后依次把 a[k]同

后面元素比较,若 a[k]>a[j],则使 k=j.最后看看 k=i 是否还成立,不成立则
交换 a[k],a[i],这样就比冒泡法省下许多无用的交换,提高了效率。

void choise(int *a,int n)