C 语言数组排序小结
让我们先定义一个整型数组 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)