一、选择排序(10个数为例)
# include <stdio.h>
void main()
{
int a[10],i,j,k,t;
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<9;i++)
{
k=i;
for (j=i+1;j<10;j++)
if(a[k]>a[j])
k=j;
t=a[i];
a[i]=a[k];
a[k]=t;
}
for (i=0;i<10;i++)
printf("%d",a[i]);
}
选择排序的精髓 :记录最小元素K的下标位置,然后判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素和它交换,这样就找到整个数组中最小的数了,然后 找到数组中第二小的数,让它与第二个元素交换,以此类推
二、插入排序(给6个数排序为例)
# include<stdio.h>
void main()
{
int a[6],i,j,k;
for (i=0;i<6;i++)
scanf("%d",&a[i]);
for (j=1;j<6;j++)
{
k=a[j];
for (i=j-1;i>=0 && a[i]>k;i - -)
a[i+1]=a[i];
a[i+1]=k;
}
}
插入排序的要点是 :从下标为k=1开始,把a[k]拿出来,如果a[k]前面的数a[]大于a[k],就把a[]放到它自己的后面,原来的位置变为空,如此循环,直到条件不满足,再把a[k]的值放到此时为空 的地方。
三.起泡排序(10个数 排序为例)
# include<stdio.h>
void main()
{
int a[10],i,j,t;
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (j=0;j<9;j++)
for(i=0;i<9-j;I++)
if (a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for (i=0;i<10;i++)
printf("%d",a[i]);
}
起泡排序很容易理解 ,起泡法是从一端开始比较的,第一次循环就是把最大数放到最后一个位置,第二次循环就是把第二最大数放到倒数第二位置。整个过程就像烧开水一样,较小值像水中的气泡一样逐趟往上冒,每一趟都有一块"最大"的石头沉到水底。
四、逆序
以5个数为例
# include<stdio.h>
void main()
{
int a[5],i;
for (i=0;i<5;i++)
scanf("%d",&a[i]);
for (i=0;i<2;i++)
{
t=a[i];
a[i]=a[4 - i];
a[4 - i]=t;
}
for (i=0;i<5;i++)
printf("%d",a[i]);
}