关于冒泡排序和选择排序

目录:

  • 选择排序
    • 选择排序的代码
      • 选择排序的解释
        • dev c++环境下的运行

#选择排序的代码

#include<stdio.h>
main()
{
	int a[5],i,j,t,k;
	printf("请输入5个数字:");
	for(i=0;i<5;i++)
	scanf("%d",&a[i]);
	for(i=0;i<4;i++)
	{
		k=i;
		for(j=i+1;j<5;j++)
		{
			if(a[k]>a[j])
			k=j;
		}
		if(k!=i)
		{
			t=a[i];
			a[i]=a[k];
			a[k]=t;
		}
	}
 		for(i=0;i<5;i++)
		 printf("%d\n",a[i]);	
}	

选择排序先进行比较,只改变数组下标,不交换位置

一轮循环后再改变数组内元素的位置

例如:
5 1 3 2 0
比较:
首先i=0,k=0,j=1,5>2,所以k=1
然后j++,j=2,5>3,所以k=2以此类推一轮下来k=4
接下循环k不等于i,则进行交换,a[[4]]=5,a[[0]]=0
得到0 1 3 2 5
接着i=1,k=1,j=2;a[[1]]不大于a[[2]],不进行交换
接着i=2,k=2,j=3;a[[2]]>a[[3]],3>2,k=3
接下来进行交换 k不等于i,则进行交换,a[[3]]=3
则得到0 1 2 3 5
即排序完成。

dev c++环境下的代码: 在这里插入图片描述

结果:

在这里插入图片描述
目录:

  • 冒泡排序
    • 冒泡排序的代码
      • 冒泡排序的解释
        • dev c++环境下的运行

#冒泡排序的代码:

#include<stdio.h>
main()
{
	int a[5],i,j,t;
	printf("请输入5个数字:");
	for(i=0;i<5;i++)
	scanf("%d",&a[i]);
	  for(i=0;i<6;i++)
	  {
	     for(j=0;j<5-i;j++)
		{
           if(a[j]>a[j+1])
		   {
		   	  t=a[j];
		   	  a[j]=a[j+1];
			  a[j+1]=t; 
		   	 
		   }		 	
		} 	
	  } 
	  for(i=0;i<5;i++)
	  printf("%d\n",a[i]);
}

*冒泡排序先进行比较,如果符合条件,直接进行交换

例如
5 1 3 4 2
首先i=0,j=0,a[[0]]>a[[1]],所以进行交换,得到1 5 3 4 2
继续j++,j=1,a[[1]]>a[[2]],所以进行交换,得到1 3 5 4 2
以此类推,一轮比较得到 1 3 4 2 5
接下来 i++,i=1,j=0,a[[0]]不大于a[[1]] 不进行交换
j=1,a[[1]]不大于a[[2]],j++,a[[2]]>a[[3]],经过交换得到1 3 2 4 5
j<i-1的原因是,上一轮已经排好了最后末尾最大的数,可以减少循环次数
接下来继续进行,以此类推,得到 1 2 3 4 5

扫描二维码关注公众号,回复: 8702393 查看本文章

dev c++环境下的代码

在这里插入图片描述

发布了4 篇原创文章 · 获赞 1 · 访问量 217

猜你喜欢

转载自blog.csdn.net/weixin_45832286/article/details/102926722
今日推荐