精华内容
下载资源
问答
  • 按从小到大排序来说一下选择排序和冒泡排序 选择排序思想:每一轮都把选择出来的最小值放到数组的左边,第一轮先把第一个数看作最小值,其下标为最小值的下标,依次将最小值与后面的值进行比较,将每一次比较小的...

    按从小到大排序来说一下选择排序和冒泡排序

    选择排序思想:每一轮都把选择出来的最小值放到数组的左边,第一轮先把第一个数看作最小值,其下标为最小值的下标,依次将最小值与后面的值进行比较,将每一次比较小的数的下标记为最小值得坐标,直到该轮结束,判断最小值的坐标是否是该轮第一个数的下标,如果不是,则 将其交换,每一轮都是如此,一共比较(n-1)轮。代码如下:

    #include <stdio.h>
    
    #define n 6//n为数组中的元素个数
    
    int main(){
          int a[n]={5,3,7,5,4,2};
          int minIndex;
          int i,j;
          int buf;
          for(i=0;i<n-1;i++)
          {
                minIndex=i;
                for(j=i+1;j<n;j++)
                {
                      if(a[minIndex]>a[j])
                            minIndex=j;
                }
                if(minIndex!=i)
                {
                      buf=a[minIndex];
                      a[minIndex]=a[i];
                      a[i]=buf;
                }    
          }
          for(i=0;i<n;i++){
                printf("%d\n",a[i]);
          }
    }
    

    结果如图所示:

    冒泡排序思想:每一轮都把选出来的最大值放在最右边,每一轮都把两个相邻的元素进行比较,如果前一个比后一个大,则将其调换位置,直至所有的数都比较完,一共比较(n-1)轮。代码如下:

    #include <stdio.h>
    #define n 6//n为数组中的元素个数 
    int main(){
          int a[n]={5,3,7,5,4,2};
          int i,j;
          int buf;//替换中间变量 
          for(i=0;i<n-1;i++)
          {
                for(j=0;j<n-1;j++)
                {
                      if(a[j]>a[j+1])//判断如果前一个比后一个大 
                      {
                            buf=a[j];//交换两个元素的数值 
                            a[j]=a[j+1];
                            a[j+1]=buf;
                      }                 
                }     
          }
          for(i=0;i<n;i++){
                printf("%d\n",a[i]);
          }
    }
    

    结果如图所示:

    展开全文
  • C语言选择排序冒泡排序及直方图打印 题目如下: 部分国家新冠疫情分析。 定义一个二维char数组用于存放国家的名字 定义两个一维int数组分别存放每个国家的确诊人数死亡人数 定义一个一维float数组用于存放死亡率...

    C语言选择排序、冒泡排序及直方图打印

    题目如下:

    部分国家新冠疫情分析。
    定义一个二维char数组用于存放国家的名字
    定义两个一维int数组分别存放每个国家的确诊人数和死亡人数
    定义一个一维float数组用于存放死亡率,死亡率需通过程序计算,死亡率 = 死亡人数 / 确诊人数。
    依次执行如下操作:
    (1) 用冒泡排序算法对表1的数据按照确诊人数由多到少的顺序排序,将结果显示在屏幕上并绘制直方图(参照图1),其中屏幕上每一行的显示形式为:
    序号 国家 确诊人数 死亡人数 死亡率
    (2) 用冒泡排序算法对表1的数据按照死亡率由大到小的顺序排序,将结果显示在屏幕上并绘制直方图(参照图1),其中屏幕上每一行的显示形式为:
    序号 国家 死亡率 死亡人数 确诊人数
    (3) 用选择排序算法对表1的数据按照死亡人数由多到少的顺序排序,将结果显示在屏幕上并绘制直方图(参照图1),其中屏幕上每一行的显示形式为:
    序号 国家 死亡人数 确诊人数 死亡率
    在这里插入图片描述

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void){
    	char country[18][20]={"美国","法国","土耳其","印度","英国","俄罗斯","意大利","西班牙","巴西","德国","哥伦比亚","阿根廷","波兰","加拿大","伊朗","墨西哥","中国"};
    	char str[18];
    	int patient[18] = {31990519,5502014,4550820,16263695,4416588,4691290,3935703,3468617,14237078,3263415,2740544,2824652,2742122,1172697,2358809,2319519,102347};  
    	int death[18]= {571179,102655,37672,186920,127638,105718,118699,77591,386416,81326,70446,61176,64707,23870,68746,214095,4845};
    	int i,j,k,temp;
    	float  dyingratio[18],n;
    
    	for(i = 0 ; i < 17 ; i++)// 计算死亡率 
    	{
    		dyingratio[i] = death[i]*100.0/patient[i];		
    	} 
    
    	for(i = 0 ; i < 17 ; i++){                     //由确诊人数由多到少进行冒泡排序 
    	 	for(j = 0 ; j < 16 - i; j++){
    		    if(patient[j] < patient[j+1]){
    				temp = patient[j];
    	 			patient[j] = patient[j+1];
    	 	 		patient[j+1] = temp;
    	 	 
    	 	 		strcpy(str,country[j]);
    	 	 		strcpy(country[j],country[j+1]);
    	 			strcpy(country[j+1],str);
    	 	 
    	 			temp = death[j];
    	 			death[j] = death[j+1];
    	 			death[j+1] = temp;
    	 	 
    	 	 		n = dyingratio[j];
    	 			dyingratio[j] = dyingratio[j+1];
    	 			dyingratio[j+1] = n;
    	 		} 
    	 	}
    	 }
     	printf("按照确诊人数由少到多冒泡排序(按下回车)\n");
    	getchar() ;
    	printf("序号   国家        确诊人数    死亡人数     死亡率 \n\n"); 
    	for(i = 0; i < 17; i++){
    		printf("[%02d]   %-10s  %-12d%-12d %.2f%\%",i + 1,country[i],patient[i],death[i],dyingratio[i]);	  
    		printf("\n");
        }
    	printf("\n");
    	printf("\n显示确诊人数直方图(按下回车)\n");
    	getchar() ;
    	for(i = 0; i < 17; i++){
    		printf("%-10s:",country[i]);
    		for(j = 0;j < patient[i]/500000 + 1; j++){
    			printf("*");
    		}
    		printf("\n"); 
    	}printf("\n");
    	
    	for(i = 0 ; i < 17 ; i++){                     //由死亡率由大到小进行冒泡排序 
    	 	for(j = 0 ; j < 17 - i; j++){
    		    if(dyingratio[j] < dyingratio[j+1]){
    		    	
    	 	 		n = dyingratio[j];
    	 			dyingratio[j] = dyingratio[j+1];
    	 			dyingratio[j+1] = n;
    	 			
    				temp = death[j];
    	 			death[j] = death[j+1];
    	 	 		death[j+1] = temp;
    	 	 
    	 	 		strcpy(str,country[j]);
    	 	 		strcpy(country[j],country[j+1]);
    	 			strcpy(country[j+1],str);
    	 	 
    	 			temp = patient[j];
    	 			patient[j] = patient[j+1];
    	 			patient[j+1] = temp;
    	 		}
    	 	}
    	}
    	printf("按照死亡率由大到小冒泡排序(按下回车)\n");	
    	getchar();
    	printf("序号   国家      死亡率     死亡人数     确诊人数\n\n"); 
    	for(i = 0; i < 17; i++){
    		printf("[%02d]   %-10s%.2f%\%      %-12d %-12d  ",i + 1,country[i],dyingratio[i],death[i],patient[i]);
    		printf("\n");
        }
    	printf("\n显示死亡率直方图(按下回车)\n");
    	getchar() ;
    	for(i = 0; i < 17; i++){
    		printf("%-10s:",country[i]);
    		for(j = 0;j < dyingratio[i]*10; j++){
    			printf("*");
    		}
    		printf("\n"); 
    	}printf("\n");
    	
    	for(i = 0 ; i < 16 ; i++){                     //由死亡人数由大到小进行选择排序 
    	 	k = i;
    		for(j = i + 1; j < 17; j++){
    		    k = death[k] < death[j]? j:k;
    	 	}
    		temp = death[i];
    		death[i] = death[k];
    		death[k] = temp;
    		
    		n = dyingratio[i];
    		dyingratio[i] = dyingratio[k];
     		dyingratio[k] = n;
     
     		strcpy(str,country[i]);
     		strcpy(country[i],country[k]);
    		strcpy(country[k],str);
     
    		temp = patient[i];
    		patient[i] = patient[k];
    		patient[k] = temp;
    	}
    	printf("按照死亡人数由多到少选择排序(按下回车)\n");	
    	getchar();
    	printf("序号   国家       死亡人数     确诊人数     死亡率\n\n"); 
    	for(i = 0; i < 17; i++){
    		printf("[%02d]   %-10s %-12d %-12d %.2f%\%    ",i + 1,country[i],death[i],patient[i],dyingratio[i]);
    		printf("\n");
        }
        printf("\n显示死亡人数直方图(按下回车)\n");
    	getchar() ;
    	for(i = 0; i < 17; i++){
    		printf("%-10s:",country[i]);
    		for(j = 0;j < death[i]/10000+1; j++){
    			printf("*");
    		}
    		printf("\n"); 
    	}	   
    	return 0;	 
    }	
    
    展开全文
  • 来源:https://blog.csdn.net/zjy18886018024/category_7741145.html今天给大家分享一些关于C语言的算法,选择排序和冒泡排序。对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为...

    技术干货第一时间送达!

    来源:https://blog.csdn.net/zjy18886018024/category_7741145.html

    今天给大家分享一些关于C语言的算法,选择排序和冒泡排序。

    对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大或者最小的。此时就要利用3个变量表示元素的下标。一个表示当前,一个表示找到的最大或者最小的下标,一个用于存放每次循环中最大值的下标。在掌握了程序的基本思想之后,再进行排序。找到最大的下标后赋给每次除非的那个最大的下标。找到之后判断所假设的当前值是否为此次循环的最大值,如果不是,就交换最大 与当前的值,从而将数组以一定的顺序排放,最后写一个循环将结果输出。代码不是很难,所以我就逐步讲解了,只是附上代码,不懂的可以给我留言,我给大家讲解或者有什么不好的地方,我也好修正。

    #includevoid main()//主函数{int a[10];int i,j,w;printf("请输入10个数字:

    ");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++){for(j=0;j<10;j++)if(a[i]

    ");for(i=0;i<10;i++)printf("%4d",a[i]);printf("

    ");}

    结果展示:

    f11167e8572249c79318bd03c4dc829d.jpg

    接下来是冒泡排序,这个是C语言中最常用的算法之一,因为这个比较容易理解,多数人在他们要进行排序的时候首先使用的就是这个算法。这个算法比较容易理解。对于冒泡排序,主要采用的是相邻数两两进行比较的思想。如果后一个比前一个大或者小,则将其调换位置,直至所有的数都比较完。如果给定一个大小为n的数组,那么需要比较n-1趟,每一趟比较n-1-i次 ,i 表示上次循环中已经比较完的下标。写两个循环判断,如需交换则进行交换,如果不需要交换则进行下两个数的比较,直到所有的数比较完。最后,用一个循环将排序完成后的数全部输出。代码如下:

    #include#define N 10void main(){int a[10];int i,j,t;printf("请输入10个数字:

    ");for(i=0;i<10;i++)scanf("%d",&a[i]);//使用两层循环for(i=0;i

    ");for(i=0;i<10;i++)printf("%4d",a[i]);printf("

    ");}

    结果:

    42b69b92fa904c8781e0c0fa3b7c2a09.jpg

    结论浅说:

    对于选择排序的分析是很简单的,输入的规模由数组元素决定,基本操作是键值比较A[j]

    展开全文
  • C语言选择排序和冒泡排序 给大家分享一些关于C语言的算法,选择排序和冒泡排序。 对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大或者最小的。此时就要利用3个变量表示元素...

    C语言中选择排序和冒泡排序

    给大家分享一些关于C语言的算法,选择排序和冒泡排序。

    对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大或者最小的。此时就要利用3个变量表示元素的下标。一个表示当前,一个表示找到的最大或者最小的下标,一个用于存放每次循环中最大值的下标。在掌握了程序的基本思想之后,再进行排序。找到最大的下标后赋给每次除非的那个最大的下标。找到之后判断所假设的当前值是否为此次循环的最大值,如果不是,就交换最大 与当前的值,从而将数组以一定的顺序排放,最后写一个循环将结果输出。

    #include<stdio.h>
    void main()//主函数
    {
    int a[10];
    int i,j,w;
    printf(“请输入10个数字: \n”);
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    for(i=0;i<10;i++)
    {
    for(j=i+1;j<10;j++)
    if(a[i]<a[j])//进行比较
    //比较后进行交换
    {
    w=a[i];
    a[i]=a[j];
    a[j]=w;
    }
    }
    printf(“排序后:\n”);
    for(i=0;i<10;i++)
    printf("%3d",a[i]);
    printf("\n");

    }

    接下来是冒泡排序,这个是C语言中最常用的算法之一,因为这个比较容易理解,多数人在他们要进行排序的时候首先使用的就是这个算法。这个算法比较容易理解。对于冒泡排序,主要采用的是相邻数两两进行比较的思想。如果后一个比前一个大或者小,则将其调换位置,直至所有的数都比较完。如果给定一个大小为n的数组,那么需要比较n-1趟,每一趟比较n-1-i次 ,i 表示上次循环中已经比较完的下标。写两个循环判断,如需交换则进行交换,如果不需要交换则进行下两个数的比较,直到所有的数比较完。最后,用一个循环将排序完成后的数全部输出。代码如下:

    include<stdio.h>
    int main()
    {
    int a[5]={3,1,5,4,2};
    int i,j,t;
    for(i=0;i<4;i++)
    {
    for(j=0;j<4-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",a[i]);
    }

    结论:

    对于选择排序的分析是很简单的,输入的规模由数组元素决定,基本操作是键值比较A[j]<A[min]。因此,对于任何输入来说,选择排序都是一个O(n^2)的算法。因此,这个实验的时间复杂度为O(100),空间复杂度为O(10)。然而,键的交换次数仅为O(n),或者更精确一点,是n-1次(i循环每重复一次执行一次交换)。这个特性使得选择排序优于许多其他的排序算法。

    冒泡排序就是相邻两个数相比较,大数就沉底(或者小数上浮的过程),总共进行了n-1次比较和交换。上面的冒泡算法为了便于算法的实现,所以考虑只使用一个一维数组来存放10个整型数据。排序过程中数据始终在这个数组中(原地操作,不占用额外的空间)。所以该算法的时间复杂度为O(n-1),空间复杂度为O(1)。

    展开全文
  • 冒泡排序与插入排序插入排序选择排序 插入排序 void num_rank1(int* a, unsigned int len) { /* *插入排序(升序排序) *参数a:存放数字序列的首地址(数组名) *len:数字的个数 */ unsigned int i, j = 0; ...
  • 一、冒泡排序  原理解析:(以从小到大排序为例)在一排数字中,将第一个与第二个比较大小,如果后面的数比前面的小,则交换他们的位置。 然后比较第二、第三个……直到比较第n-1个第n个,此时,每一次比较都将...
  • 主要介绍了C++中实现选择排序冒泡排序和快速排序的代码示例,例子带有执行时间统计还可以简单看一下效率对比,需要的朋友可以参考下
  • 简单选择排序 #include<stdio.h> main() { int num[10],i,j,t1,t2; printf("请输入10个数:"); for(i=0;i<10;i++) { scanf("%d",&num[i]); } for(i=0;i<10;i++) { t1=i; ...
  • 选择排序 #include<stdio.h> #include<time.h>int main() { srand((unsigned)time(NULL)); int a[10]; int i,j,t; for(i=0; i<10; i++) a[i]=rand()%50; for(i=0; i<10; i++) printf("%...
  • 1.选择排序 思想:从当前数组元素开始往后边找,找到大于(或者小于,分从大到小排序还是从小到大排序两种情况)当前数组元素的数组中最大值(最小值)就交换。 例如: 【2】 8 1 -5 0 ==》 【8】2 1 -5 0 ...
  • C语言排序(冒泡排序选择排序、插入排序和快速排序)C语言排序什么是排序?1.冒泡排序基本思想主要思路:动态示例demo2.选择排序基本思想主要思路动态示例demo3.插入排序基本思想主要思路动态示例demo4.快速排序...
  • 一、冒泡排序 1.1、冒泡排序的基本原理 依次比较相邻的两个数,将较大(小)的数相邻的数交换位置。 1.2、具体算法 假设有一个n个元素的整型数组a,需要从小到大排序 首先我们拿a[0]a[1]进行比较,如果a[0]大于...
  • 今天练习了选择排序和冒泡排序觉得这两种排序算法是十分相似的。代码如下 冒泡排序: #include<stdio.h> int main(){ int array[] = {1,123,13,123,1,23,4,334,4557,8}; int num,m; //num存储数组个数,m...
  • printf("选择排序后的数组:"); selection_sort(a,len); print_1Darray(a,len); float *b =a; printf("冒泡排序后的数组:"); bubble_sort(b,len); print_1Darray(b,len); return 0; } array.h ...
  • 文章目录冒泡排序选择排序 冒泡排序 #include <stdio.h> #include <stdlib.h> #include<math.h> int main() { int n; scanf("%d",&n); int a[n]; for(int i=0; i<n; i++) scanf("%d...
  • 感觉自己混淆了选择排序和冒泡排序了,求教如何区别? #include #include typedef struct list { int data; struct list *next; } SLIST; SLIST *creat(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc...
  • 自学计算机网络的时候看到一张...C语言排序法有很多种,目前我只学到了选择和冒泡法,这两种排序主要考察的就是for循环的嵌套循环和数组,里面还涉及一个交换算法,本文的顺序是 交换算法,选择排序,冒泡法排序
  • 冒泡排序1.基本思路:二级目录三级目录 一.冒泡排序 每次将相邻两个数比较,将小的调到前头。 1.基本思路: *****将9,8,5,4,2,0六个数字按冒泡排序的方式排序 第一趟比较: 第一次:第一个数9第二个数8相比,8比9小,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 658
精华内容 263
关键字:

c语言选择排序和冒泡排序

c语言 订阅