c语言选择冒泡排序讲解(附代码)
冒泡排序原理举例:
给定一组数 15 20 1 16 进行从大到小冒泡排序。第一次起泡的第一次比较:用15和20比较,若15比20小则交换位置,此时数字位置为 20 15 1 16 ,第一次起泡的第二次比较:用15和1比较,若15比1小则交换位置,15不比1小,则位置不变,此时数字位置为 20 15 1 16,第一次起泡的第三次比较:用1和16比较,若1比16小则交换位置,此时数字位置为 20 15 16 1,四个数需要比较,共比较了3次。第二次起泡的第一次比较:用20和15比较,若20不比15小,则位置不变,此时数字位置为 20 15 16 1 ,第二次起泡的第二次比较:用15和16比较,若15比16小则交换位置,15比16小,则交换位置,此时数字位置为 20 16 15 4,三个数需要比较,共比较了2次。以此类推。
选择排序原理举例:
给定一组数 15 20 1 16 进行从小到大选择排序。第一次选择排序:将四个数中最小的数与第一个数交换,此时数字位置为 1 20 15 16 ,第二次选择排序:将三个数中最小的数与第二个数交换,此时数字位置为 1 15 16 20 ,第三次选择排序:将两个数中最小的数与第三个数交换,此时数字位置为 1 15 16 20 。四个数共进行了三次选择排序。
具体代码如下:
#include <stdio.h>
#define LEN 10//宏定义LEN为10
void sort(int array[], int n);//函数声明
void buble(int array[], int n);
void main()
{
int a[LEN], i;
printf("\n请输入%d个无序整数:\n",LEN);
for(i=0;i<LEN;i++) scanf("%d",&a[i]);
printf("\n开始选择排序\n");
sort(a,LEN);
printf("从小到大选择排序结果:\n");
for(i=0;i<LEN;i++) printf("%d ",a[i]);
printf("\n");
printf("\n开始冒泡排序\n");
buble(a,LEN);
printf("从大到小冒泡排序结果:\n");
for(i=0;i<LEN;i++) printf("%d ",a[i]);
printf("\n");
}
//选择排序
void sort(int array[], int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(array[j]<array[k])
{
k=j;
}
}
t=array[k];
array[k]=array[i];
array[i]=t;
}
}
//冒泡排序
void buble(int array[], int n){
int i, j, t;
for (i=0; i<n-1; i++)
{
for (j=0; j<n-1-i; j++)
{
if (array[j]<array[j+1])
{
t=array[j];
array[j]=array[j+1];
array[j+1]=t;
}
}
}
}
/*测试用例:
3 5 8 11 15 20 1 4 77 109
*/
执行结果: