c语言选择冒泡排序讲解(附代码)

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

*/


执行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46020391/article/details/109401029
今日推荐