一.冒泡排序
每次将相邻两个数比较,将小的调到前头。
1.基本思路:
*****将9,8,5,4,2,0
六个数字按冒泡排序的方式排序
第一趟比较:
第一次:第一个数9和第二个数8相比,8比9小,所以将9和8互换。
第二次:第二个数9和第三个数5相比,5比9小,所以将9和5互换。
以此类推,当比较4次后,上面的数据会变成8,5,4,2,0,9的形式,比较了4次之后只是将最大的数沉入了最底下,而将小于它的数浮上来,还没有完成排序,当时经过这几次比较,最后一位数肯定是最大的,所以不需要去动它,接下来只需将次大值找到然后将其沉入倒数第二的位置
第二趟比较:
此时数据的排序方式为:8,5,4,2,0,9
第一次:第一个数8和第二个数5相比,5比8小,所以将5和8互换。
第二次:第二个数和第三个数比较,以次类推,但是最后不需要将数和最后一个数比较,因为9一定是最大的,所以它的比较次数比第一趟少一次
。
第三趟,第四趟···············和上面类似,但是每次的比较次数都会比上面少一次。
图示如下:
2.demo
#include <stdio.h>
#include <stdlib.h>
#define SIZE 6
int main()
{
int i,j,temp;
int a[SIZE]={9,8,5,4,2,0};
printf("behind:\n");
for(i=0;i<SIZE;i++)
{
printf("%d ",a[i]);
}
putchar('\n');
for(i=0;i<SIZE-1;i++)
for(j=0;j<SIZE-i-1;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
printf("after :\n");
for(i=0;i<SIZE;i++)
{
printf("%d ",a[i]);
}
putchar('\n');
return 0;
}
运行结果如下:
二.选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
1.基本思路:
*****将9,8,5,4,2,0
六个数字按冒泡排序的方式从小到大排序
第一趟
先假设第一个数为最小值,然后将第一个数和后面的数依次比较,若后面的数更小,则记录出他们的下表,到比较完之后,再将6个数字中的最小值和第一个数互换,注意:在比较的过程中没有进行数的互换,只是将其中的最小值找到保存起来,等每一趟比较完成后才进行交换
第二趟
第一趟之后的数为:0,9,8,5,4,2
此时第一个肯定是最小值,所以继续对后面五个数进行操作,以此类推。
2.demo
#include <stdio.h>
#include <stdlib.h>
#define SIZE 6
int main()
{
int i,j,MIN,temp;
int a[SIZE]={9,8,5,4,2,0};
printf("behind\n");
for(i=0;i<SIZE;i++)
{
printf(" %d ",a[i]);
}
putchar('\n');
for(i=0;i<SIZE-1;i++)
{
MIN=i;
for(j=i+1;j<SIZE;j++)
{
if(a[MIN]>a[j])
{
MIN=j;
}
}
temp=a[i];
a[i]=a[MIN];
a[MIN]=temp;
}
printf("after\n");
for(i=0;i<SIZE;i++)
{
printf(" %d ",a[i]);
}
putchar('\n');
return 0;
}
运行结果:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)