冒泡排序和选择排序

时间:2022-03-07 22:10:31

冒泡排序:
冒泡就是将最大或最小的值先冒出来,采用相邻两个数对比的方式。
每次比较都是相邻的两个值,以按从小到大的顺序为例:
每次相邻的两个值比较,前面的大则交换位置中的数值。

#include<stdio.h>

void main()
{

 int a[5] = {2,5,10,7,3};

 int i,j,k;

 for(i=0;i<5;i++)
 {
  for(j=0;j<5-i-1;j++)
  {
   if(a[j] > a[j+1]) //依次比较“相邻”的值
   {
    k = a[j];
    a[j] = a[j+1];
    a[j+1] = k;
   }
  }
  printf("a[%d]:[%d]\n", j, a[j]);
 }

 for(i=0;i<5;i++)
 {
  printf("a[%d]=[%d]\t", i, a[i]);
 }

 printf("\n");
}

选择排序:
按下标来排序的,先找第一个下标里的值应该是多少,再找第二个下标里的值是多少……
每次都是拿第一个与后面的每个依次比较,将小的值下标记下来,最后拿第一个和这个下标的值比较。
不是相邻下标的比较。

#include<stdio.h>

void main()
{

 int a[5] = {2,5,10,7,3};

 int i,j,k,min;

 for(i=0;i<5;i++)
 {
  min=i;

   for(j=i+1;j<5;j++)
   {
    if(a[min] > a[j])
    {
     min=j; //找到最小值的下标
    }
   }

   if(min != i) //和最小值下标中的最小值交换
   {
    k = a[i];
    a[i] = a[min];
    a[min] = k;
   }
   printf("a[%i]:[%d]\n", i, a[i]);
 }

 for(i=0;i<5;i++)
 {
  printf("a[%d]=[%d]\t", i, a[i]);
 }

 printf("\n");
}

以上可以用函数来写:
void rank(int a[], int n)   //数组首地址和数组中的元素个数
{

}