精华内容
下载资源
问答
  • 1.选择法排序 思想:从当前数组元素开始往后边找,找到大于(或者小于,分从大到小排序还是从小到大排序两种情况)当前数组元素的数组中最大值(最小值)就交换。 例如: 【2】 8 1 -5 0 ==》 【8】2 1 -5 0 ...

    1.选择法排序

    • 思想:从当前数组元素开始往后边找,找到大于(或者小于,分从大到小排序还是从小到大排序两种情况)当前数组元素的数组中最大值(最小值)就交换。

    • 例如:

    • 【2】 8 1 -5 0 ==》 【8】2 1 -5 0 ==》【8】2 1 -5 0 ==》【8】2 1 -5 0
      (8>2,交换)

    • 8【2】 1 -5 0 ==》8【2】 1 -5 0 ==》8【2】 1 -5 0 ==》8【2】 1 -5 0

    • 8 2 【1】 -5 0 ······

    • 8 2 1 【-5】 0 ·······

    • 8 2 1 -5 【0】 ·······

    • 总之,选择法排序就是先比较,在交换

    • 上代码

    for (int i = 0; i < N;i++)
    	{
    		for (int j = i + 1; j < N;j++)
    		{
    			if (nums[j]>nums[i])
    			{
    				int temp = nums[j];
    				nums[j] = nums[i];
    				nums[i] = temp;
    			}
    		}
    	}
    

    我哪里表述不明白的请在下面评论。

    展开全文
  • 感觉自己混淆了选择排序法和冒泡排序了,求教如何区别? #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语言选择排序法和冒泡排序法

    万次阅读 多人点赞 2015-04-20 19:11:48
    给定一个数组(或者输入一个数组),分别运用选择排序法和冒泡排序法将所要的结果输出。 程序分析:  选择排序 1>.对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大(最小)的...

    问题描述:

    给定一个数组(或者输入一个数组),分别运用选择排序法和冒泡排序法将所要的结果输出。

    程序分析:

                                            选择排序

    1>.对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大(最小)的。此时就要利用3个变量i,j,k表示元素的下标。i表示当前,j表示找到的最大(最小)的下标,k用于存放每次循环中最大值的下标。

    2>.在掌握了程序的基本思想之后,再进行排序。找到最大的下标后赋给k。找到之后判断所假设的当前值是否为此次循环的最大值,如果不是,就交换a[k] 与当前a[i]的值,从而将数组以一定的顺序排放,最后写一个循环将结果输出。

                                             冒泡排序

    1>.对于冒泡排序,主要采用的是相邻数两两进行比较的思想。如果后一个比前一个大(小),则将其调换位置,直至所有的数都比较完。

    2>.如果给定一个大小为n的数组,那么需要比较n-1趟,每一趟比较n-1-i次 ,i 表示上次循环中已经比较完的下标。写两个循环 判断,如需交换则进行交换,如果不需要交换则进行下两个数的比较,直到所有的数比较完。最后,用一个循环将排序完成后的数全部输出。

    程序如下:

    /*********************选择排序******************************/
    /*#include<stdio.h>
    
    int main()
    {
    	int i = 0;         //定义一个i并且赋初值为0,i作为数组的下标
    	int j = 0;      //定义j并且赋初值为0,j作为找到最大值时所对应的下标
    	int k;            //定义一个k,用来保存此次循环中最大值的下标
    	int temp;         //定义一个中间变量temp,供以后交换值的时候使用
    	int a[]={4,5,6,72,1,7,9,3,};    //定义了一个9个数的数组,并且初始化
    	int len = sizeof(a)/sizeof(a[0]);  //len是数组的大小
    	for(i = 0;i<len;i++)        //判断i是否小于len,执行下面的语句
    	{
    		k = i;           //假设此次循环中的最大值就是当前的值   
    		for(j = i+1;j<len;j++)
    		{
    			if(a[j]>a[k])    //将假设的当前最大值与后面的值比较
    			{
    				k = j;     //若后面的值更大,则交换下标
    			}
    		},当前最大值
    		if(k != i)       //比较之后如果此次循环中最大值并非当前值
    		{ 
    			temp = a[i];   //将此次循环中的最大值与a[k]交换
    			a[i] = a[k];
    			a[k] = temp;
    		}
    	}
    	for(i=0;i<len;i++)       //利用for循环将结果依次输出
    	{
    		printf("%d ",a[i]);
    	}
    	return 0;
    }*/
    /*************************冒泡排序******************************/
    /*#include<stdio.h>
    
    int main()
    {
    	int i = 0;
    	int j = 0;
    	int temp;
    	int a[10] = {9,8,7,6,5,4,3,2,1,0};
    	int len = sizeof(a)/sizeof(a[0]);
    	for(i = 0;i<len-1;i++)
    	{
    		for(j = 0;j< len-1-i;j++)
    		{
    			if(a[j+1]>a[j])
    			{
    				temp = a[j+1];
    				a[j+1] = a[j];
    				a[j] = temp;
    				i++;
    			}
    
    		}
    	}
    	for(i = 0;i<len;i++)
    	{
    		printf("%d ",a[i]);
    	}
    	return 0;
    }*/
    

    展开全文
  • 选择法排序 for(i=0;i<n-1;i++)//外循环代表比较的次数,循环n-1次 { int t; k=i; for(j=i+1;j<n;j++)//内循环是在待排序列中找最小值 { if(a[j]<a[k]) k=j; } t=a[k]; a[k]=a[i]; a[i...

    选择法排序(由小到大)

    for(int i=0;i<n-1;i++)//外循环代表比较的次数,循环n-1次
    {
    	int t;
    	int k=i;
    	for(j=i+1;j<n;j++)//内循环是在待排序列中找最小值
    	{
    		if(a[j]<a[k]) k=j;
    	}
    	t=a[k];
    	a[k]=a[i];
    	a[i]=t;
    }

    冒泡排序(由小到大)

    for(int i=0;i<n-1;i++)//循环n-1次
    	for(j=0;j<n-i-1;j++)
    	{
    		int t;
    		if(a[j]>a[j+1])
    		{
    			t=a[j];
    			a[j]=a[j+1];
    			a[j+1]=t;
    		}
    	}
    
    展开全文
  • C语言 冒泡法排序选择法排序和插入排序

    千次阅读 多人点赞 2014-12-04 22:56:06
    实例1 冒泡法排序 数组中有N个整数,用冒泡法将它们从小到大(或从大到小)排序。 ...冒泡法排序C语言教材中已经介绍过的排序方法,与其他排序方法比较起来,冒泡法效率是最低的,但因其算法

    实例1 冒泡法排序

    数组中有N个整数,用冒泡法将它们从小到大(或从大到小)排序。

    实例解析:

    排序是非常重要且很常用的一种操作,有冒泡排序、选择排序、插入排序、希尔排序、快速排序、堆排序等多种方法。这里我们先简单介绍前三种排序算法和代码的实现,其余算法将在后续课程《数据结构》中学习到。

    冒泡法排序是C语言教材中已经介绍过的排序方法,与其他排序方法比较起来,冒泡法效率是最低的,但因其算法简单,故也常被采用,其算法是:

    1从第一个数开始,相邻两个数两两比较,将大的(或小的)交换到后面,然后继续比较第23个数…..当比较完最后两个数的时候,最大数(或最小数)便排在最后了。此过程称为一趟

    (2)将最大数排除在外,其余数重复步骤1

    (3)重复步骤2,直到所有数都排好为止。

    对于有N个数的排序,上面的过程总共需要进行N-1趟。

    下面是冒泡法排序的代码:

    #include <stdio.h>

    #define  N 10

    int main()

    {int  a[N] = {3,5,2,9,7,4,8,1,0,6}, i, j, t;

     for(i = 0; i < N-1; i++){     //共进行N-1

       for(j = 0; j < N–i-1; j++)  /*已排好的数据不参与比较 */

         if(a[j] > a[j+1]){  

           t = a[j];

           a[j] = a[j+1];

           a[j+1] = t;

         }

     }

     for(i = 0; i <= N-1; i++)

       printf(“%3d”, a[i]);

     printf(“\n”);

     getch();

     return 0;

    }

    实例2 选择法排序

    数组中有N个整数,用选择法将它们从小到大排序。

    实例解析:

    选择法是被较多采用的一种排序方法,其效率比冒泡法高(交换数据的次数少),而算法却并未复杂多少。

    选择法排序总的思路是:

    1找出一个最小数,交换到最前面。

    2在剩下的数里面,再找一个最小的,交换到剩下数的最前面

    3、重复步骤,直到所有数都已排好。

    显然,对于含有N个数的数组来说,其过程也要进行N-1 ( 0 <= i < N-1 )

    上面所述步骤中,“找出一个最小数,交换到最前面”的方法是:

    先将剩下数中的第一个数(序号是i)作为擂主,用变量k记下其序号,后面的数依次与擂主(注意:擂主是a[k],不总是a[i])比较,若比擂主还小,则用k记下其序号(注意:此时不要交换),当所有数都与擂主比较后,k中存放的就是最小数的序号,然后将它交换到最前面(现在才交换)。在上面的过程中,数据只交换了一次,即每趟只交换一次数据。

    代码如下:

    #include <stdio.h>

    #define  N 10

    int main()

    {int  a[N] = {3,5,2,9,7,4,8,1,0,6}, i, j, k, t;

     for(i = 0; i < N-1; i++){          //共进行N-1

        /* 首先将最前面数当作擂主,记录其序号 */

    k = i;                    //当进行第i趟时,最前面数的序号是

        /* 后面的每一个数都与擂主进行比较,以便找出最小数 */

    for(j = i+1; j <= N-1; j++)   

          if(a[j] < a[k])          //擂主是a[k],未必总是a[i] 

            k = j;                  //若比擂主还小,则记录其序号

    /* 将最小数交换到(剩下数的)最前面 */

        t = a[k];

        a[k] = a[i];

        a[i] = t;     

     }

     for(i = 0; i <= N-1; i++)

       printf(“%3d”, a[i] );

     printf(“\n”);

     getch();

     return 0;

    }

    实例3 插入排序

    数组中有N个整数,用插入排序实现它们由小到大的排列。

    实例解析:

    插入排序也是常用的一种排序方法,效率较冒泡法高(一趟即可完成),但比选择法低(移动数据次数多)。其基本思想是:将数组分成两个区:前面是已排序的区域(有序区),后面是没有排序的区域(无序区)。每次都从无序区中取第一个数插入到有序区中适当位置,直到所有数据插入完毕为止。

    算法的具体描述是:

    待排序的数据存放在数组A[0, 1, ...N-1]中,未排序前,A[0]自己是一个有序区,A[1, 2, ...N-1]是无序区。程序必须从i = 1开始,直到i = N-1为止,每次将A[i]插入到有序区中。

    插入排序与打扑克摸牌时的理牌过程很相似,当摸来第一张牌时,不需要排序,本身就是排好的(就一张),从第二张开始,每次摸来一张牌,必须插入到原来有序的扑克牌中的适当位置,而为了找到这个适当位置,需要将新摸来的牌与手中的牌进行比较。

    基本的插入排序:

    首先在有序区A[0,1,...i-1]中查找A[i]应该插入的位置k0 <= k <= i-1),然后将A[k,k+1,...i-1]中的数据各自后移一个位置,腾出位置k插入A[i]

    若有序区所有数据均小于A[i]时,A[i]就应该在原位置不变,不需要插入。

    改进后的插入排序:

    将待插入的数据A[i]自右至左依次与有序区的数据A[i-1,i-2,...0]进行比较,若A[i]小于某数据A[j],则A[j]后移一个位置,继续与前面的数据比较......直到遇到比A[i]小的数据或前面已没有数据,则插入位置确定。

    若碰到一个数据A[j]A[i]小,则A[i]应插入到位置j+1

    A[i-1]A[i]小,则A[i]位置不变。

    若所有数据都比A[i]大,则A[i]应插入到位置0

    下面是改进后插入排序的代码:

    #define  N 10

    #include <stdio.h>

    int main()

    {int  a[N] = {3,5,2,9,7,4,8,1,0,6}, i, j, t;

     for(i = 1; i <= N-1; i++){

       t = a[i];                     //保存a[i],因a[i]会被覆盖

    for(j = i-1; a[j]>t && j>=0; j--) // a[j]>t不能写成a[j]> a[i]

         a[j+1] = a[j];

       a[j+1] = t;

    }

    for(i = 0; i <= N-1; i++)

       printf(“%3d”, a[i] );

     printf(“\n”);

     getch();

    return 0;

    }


    展开全文
  • 自学计算机网络的时候看到一张...C语言的排序法有很多种,目前我只学到了选择法和冒泡法,这两种排序主要考察的就是for循环的嵌套循环和数组,里面还涉及一个交换算法,本文的顺序是 交换算法,选择法排序冒泡法排序
  • 3.排序算法:理解重点掌握选择法排序冒泡法排序、插入法排序的思想 ⑴编写程序,对n个整数用冒泡法排序(从小到大或从大到小); ⑵编写程序,对n个整数用选择法排序(从小到大或从大到小); ⑶利用数组编程...
  • 1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个第三个,再交换,直到第n-1个第n个,此时...
  • 选择法排序和冒泡法排序: 冒泡法排序: //从前往后排好(小到大) #include <stdio.h> int main() { int a[10]={3,9,2,6,8,1,7,10,4,5}; int i,j; for(i=0;i<10;i++) { for(j=i+1;j<10;j++) { if(a[i] ...
  • C语言冒泡法和选择排序法 1.冒泡法代码 #include<stdio.h> int main() { int a[3]; int p,i,tmp; for(i=0;i<3;i++) scanf("%d",&a[i]); for(p=1;p<3;p++) for(i=0;i<3-p;i++) if(a[i]>a[i+1])...
  • 问题描述: 用选择法对10个整数从小到大排序。 方法一: 冒泡排序法 思路:每次从第一个数开始,依次对相邻两个数进行比较,满足条件,则交换两数的位置,否则继续下一个数比较 代码如下: #include<stdio.h&...
  • 1、选择法排序 选择法排序是指每次选择索要排序的数组中的最小值(这里是由小到大排序,如果是由大到小排序则需要选择最大值)的数组元素,将这些数组元素的值与前面没有进行排序的数组元素值进行互换 代码实现需要...
  • 选择排序法的主要思想是将一组数(n个)中的最大值(或最小值)先挑出来,放在首(或尾),然后在剩下的n-1个数中再次挑出最大值(或最小值),放在前一个最大值(或最小值)的前面(或后面),以此类推。...
  • C语言冒泡排序法和选择排序法的区别

    千次阅读 多人点赞 2018-06-12 17:54:07
    冒泡排序法:#define _CRT_SECURE_NO_WARNINGS 1 2.#include&lt;stdio.h&gt; 3.#include&lt;stdlib.h&gt; 4.#include&lt;assert.h&gt; 5.void rank(int arr[], int len) 6.{ 7. ...
  • ①首先,观察冒泡排序的算法的编程规律 //不按照下标为奇偶数进行排序 a[i]>a[i+1] 从小到大 #include <stdio.h> void main(){ int a[10]={1,4,5,2,3,9,8,7,6,10}; //N=10 int i,j,t; n=10; .
  • C语言冒泡排序法心得

    2020-09-02 21:39:22
    相信学过C语言的朋友都知道,在C语言中,常用的排序算法有:冒泡排序、快速排序、插入排序选择排序、希尔排序、堆排序以及归并排序等等。...在这里呢,主要是想大家一起来探讨探讨C语言冒泡排序法
  • 经典排序算法——冒泡和选择排序法 Java实现冒泡排序 基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素放到顶端,最终达到完全有序,首先看个动图: 我们要清楚...
  • C语言使用指针实现选择法和冒泡法对数字排序 前言 刚学到指针章节,遇到的习题大多是将以前写过的代码用指针的方法再写一次,不过说实话,很多写起来并不是我想像的那简单,而且觉得没啥必要,但是据说到链表指针...
  • 我们这打代码的, 有点像练钢琴功夫,一日不打就退步,学习初期最重要的还是练手感 。 ps: 本人小白一个,如果哪里有不对请大佬们指出,欢迎各位指出我的不足之处。 废话不多说,进入正题: 冒泡算法 核心思想:...
  • 问题:C语言一维数组排序,读入一个正整数 n , 再读入 n 个整数(1<n<=10) 样例: 请输入元素个数:5 请输入 5 个整数: 3 2 1 5 4 排序后:1 2 3 4 5 #include<stdio.h> #include<math.h> int...
  • 今天讲的比较难的点事冒泡和选择排序,结合代码自己的理解总结了一下。 语言中,常用的算法有:冒泡排序、快速排序、插入排序选择排序、希尔排序、堆排序以及归并排序等等。  冒泡排序法(Bubblesort)  所谓...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 279
精华内容 111
关键字:

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

c语言 订阅