冒泡、插入、选择排序

来源:互联网 发布:手机关闭淘宝店铺 编辑:程序博客网 时间:2024/05/21 06:17

什么是冒泡法排序?

就是一种简单的交换排序算法,例如对于身高178 175 173 165 179这五个数进行升序排列,详细步骤如下:

  1. 首先看前两个数组成的数组对【178,175】。由于要进行升序排列,后面的值不能小于前面的值,因此这两个数要进行交换。
    即:175<—>178 173 165 179
  2. 接下来第2、第3个数组成的数组对【178,173】也做同样交换。
    即:175 173<—>178 165 179
  3. 同样第4、5也做交换。
    即:175 173 165<—>178 179
  4. 最后一组【178,179】由于是升序,因此不用进行交换。

在以上步骤中,最后进行交换的一组数组对是【第3、4】。第4个数以后的数值,都已排序完毕。


第二轮,对未排序的第1-第3个数进行同样操作。即:
175 173 165 178 179
173<—>175 165 178 179
173 165<—>175 178 179

这样一来,前3个数的最大值就被移到了最后。


第三轮,以相同的方式对前2个数进行排序。即:
173 165 175 178 179
165<—>173 175 178 179

这样,第2个数以后的元素都按升序排列了。

至此,最小的元素已经排在了最前面,整个排序过程完成。


冒泡法C代码如下:

/*将5名学生的“身高”安升序排列*/#include<stdio.h>#define number 5  //学生人数/*交x,y指向的整数值*/void swap(int *x,int *y){    int temp = *x;    *x = *y;    *y = temp;}/*冒泡法*/void bubble(int a[],int n){    int i,j;    for(i = 0; i<n-1; i++)    {        for(j=1; j<=n-1; j++)            if(a[j-1] > a[j])                swap(&a[j-1], &a[j]);    }}int main(){    int i;    int height[] = {178,175,173,165,179};    bubble(height,number);    for(i = 0; i<number; i++)        printf("%2d:%4d\n",i+1,height[i]);    return 0;}

插入排序C代码

void insertion(int a[],int n){   int i,j;   for(i=1; i<n; i++)   {     int tmp = a[i];     for(j=i; j>0 && a[j-1]>tmp; j--)       a[j]=a[j-1];       a[j]=tmp;   }}

选择排序C代码

void selection(int a[],int n){  int i,j;  for(i=0; i<n-1; i++)  {    int min=i;    for(j=i+1; j<n; j++)      if(a[j] < a[min])      min = j;      swap(&a[min],&a[i])  }}
原创粉丝点击