选择、插入、起泡、逆序

一、选择排序(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]);

}

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值