冒泡排序:
冒泡就是将最大或最小的值先冒出来,采用相邻两个数对比的方式。
每次比较都是相邻的两个值,以按从小到大的顺序为例:
每次相邻的两个值比较,前面的大则交换位置中的数值。
#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) //数组首地址和数组中的元素个数
{
}