精华内容
下载资源
问答
  • 编程实现将给定的一组整数采用选择排序法按由小到大的顺序排序。要求: 1) 编写函数create()根据已知整数数组构造一个单链表,假设结点只有一个整数数据域。 2) 编写函数sort()采用选择排序方法对已知链表进行排序...
  • 通过本文大家就知道选择排序法的原理了!

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define YES 1
    #define NO   0

    #define uchar unsigned char
    #define uint unsigned int
    #define ushort unsigned short
    #define ulong unsigned long

    #define u8  uchar
    #define u16 ushort
    #define u32 ulong

    u32 *SelectionSort(u32 *pArr, u8 num);

    int main(void)
    {
        u32 array[] = {1, 2, 5, 7, 6, 9, 0, 3, 4, 8}; 
        u8 i = 0;
        u32 *p = 0;
       
        p = SelectionSort(array, sizeof(array)/sizeof(array[0]));

        for (i=0; i<sizeof(array)/sizeof(array[0]); i++)
        {
            printf("%d\n", *p++);
        }
          
        return 0;
    }

    /*
    方法:
    第1个周期为:第1个和第2个比,第1个和第3个比,……第1个和第n个比;
    最小的数被放在了第一位;
    第2个周期为:第2个和第3个比,第2个和第4个比,……第2个和第n个比;
    倒数第二小的数被放在了第二位;
    …………………………… …………………………………第n-1个和第n个比;
    最大的数被放在了最后一位。
    */
    u32 *SelectionSort(u32 *pArr, u8 num)
    {
        u32 tmp = 0;
        u8 i = 0;
        u8 j = 0;

        for (i=0; i<num-1; i++)
        {       
            for (j=i+1; j<num; j++)
            {
                if (pArr[i] > pArr[j])
                {
                    tmp = pArr[i];
                    pArr[i] = pArr[j];
                    pArr[j] = tmp;        
                }    
            }
        }

        return pArr;
    }

    展开全文
  • 我在看C语言程序设计是遇到一个问题,用选择法对数组中的5个整数按由小到大排序 #include int main() { void sort(int array[],int n); int a[5],i; printf("Please input 5 numbers:\n"); for(i=0;i;i++) ...
  • 算法思想动画图解选择排序法代码运行测试说明 算法思想 遍历整个数组,每次找一个当前元素后面的最小值和当前元素进行交换。 动画图解选择排序法 代码 #include <stdlib.h> #include <stdio.h> #...

    算法思想

    遍历整个数组,在未排序的序列中找到最小(大)元素,存放到未排序序列的起始位置,然后再从剩下未排序中继续寻找最小(大)元素,放在未排序序列的起始位置,直到所有元素排序完成。

    动画图解选择排序法

    在这里插入图片描述

    代码

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    
    
    void show(int arr[],int len) //打印数组元素
    {
    	for (int i = 0; i < len; i++)
    		printf("%d\t", arr[i]);
    	printf("\n");
    }
    
    void selectsSort(int arr[],int len)//选择排序算法
    {
    	int tmp;
    	for ( int i = 0;i < len - 1; i++)
    	{
    		for (int j = i + 1; j < len; j++)
    			if (arr[i] > arr[j])
    			{
    				tmp = arr[i];
    				arr[i] = arr[j];
    				arr[j] = tmp;
    			}
    	}
    }
    
    void selectsSortOptimeze(int arr[], int len)//选择排序优化
    {
    	for (int i = 0; i < len - 1; i++)
    	{
    		int idx = i;
    		for (int j = i + 1; j < len; j++)
    		{
    			if (arr[idx] > arr[j])
    				idx = j;
    		}
    		if(idx != i)
    		{
    			   arr[idx] ^= arr[i];
    				arr[i] ^= arr[idx];
    				arr[idx] ^= arr[i];
    		}
    	}
    }
    
    //递归实现
    //void Swap(int & min,int & arrData)//交换数据
    //{
    //	int tmp = min;
    //	min = arrData;
    //	arrData = tmp;
    //}
    //
    //
    //int FindMin(int arr[], int Start, int End) //找对最小数据的下标
    //{
    //
    //	int min = Start;
    //	for (int i = Start + 1; i < End; i++)
    //	{
    //		if (arr[min] > arr[i])
    //			min = i;
    //	}
    //	return min;
    //}
    //
    //void selectSortRecursion(int arr[], int Start, int End)//选择排序
    //{
    //	int i = 0;
    //	if (Start<End)
    //		int min = FindMin(arr,Start,End);
    //	selectSortRecursion(arr, Start, End);
    //}
    
    
    
    
    int main()
    {
    	srand(time(NULL));
    	int arr[10] = { 0 };
    	int arrLen = sizeof(arr) / sizeof(arr[0]);
    	for (int i = 0; i < arrLen; i++)
    		arr[i] = rand() % 100;
    	show(arr,arrLen);
    	/*selectSortRecursion(arr, 1, arrLen);*/
    	//selectsSort(arr,arrLen);
    	selectsSortOptimeze(arr, arrLen);
    	show(arr, arrLen);
    }
    

    运行测试

    在这里插入图片描述

    说明

    第一种给出的选择排序算法,当前元素和后面每一个元素进行比较,并且只要比当前元素小都进行交换,最终使得当前元素是最小值。

    第二种优化之后,我们只是标记出后面元素中最小的元素和当前元素进行交换,所以比较的过程次数是没有改变的,但是我们可以优化交换的次数。上面的动态图解也是我们优化之后的算法过程。

    第三种我们给出的是递归实现,但是我的电脑不能运行,问题出现会出现栈溢出,所以只是作为了解。

    最好情况时间:O(n ^ 2)
    最坏情况时间:O(n ^ 2)

    展开全文
  • 1,选择排序 2.冒泡排序 3.二分查找,查到输出序列号,未找到则返回-1

    1,选择排序在这里插入图片描述
    在这里插入图片描述
    2.冒泡排序
    在这里插入图片描述
    在这里插入图片描述
    3.二分查找,查到输出序列号,未找到则返回-1在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • C语言实现选择排序

    2019-06-12 09:34:45
    选择排序法对一组数据由小到大进行排序,数据分别为 526、36、2、369、56、45、78、92、125、52。 实现过程: (1) 程序中用到T两个 for 循环语句。第一个 for 循环是确定位置的,该位置是存放每次从待排序数列...
    用选择排序法对一组数据由小到大进行排序,数据分别为 526、36、2、369、56、45、78、92、125、52。

    实现过程:

    (1) 程序中用到T两个 for 循环语句。第一个 for 循环是确定位置的,该位置是存放每次从待排序数列中经选择和交换后所选出的最小数。第二个 for 循环是实现将确定位置上的数与后面待排序区间中的数进行比较的。

    (2) 程序代码如下:
    1. #include <stdio.h>
    2. int main()
    3. {
    4. int i,j,t,a[11]; //定义变量及数组为基本整型
    5. printf("请输入10个数:\n");
    6. for(i=1;i<11;i++)
    7. scanf("%d",&a[i]); //从键盘中输入要排序的10个数字
    8. for(i=1;i<=9;i++)
    9. for (j=i+1;j<=10;j++)
    10. if(a[i]>a[j]) //如果前一个数比后一个数大,则利用中间变量t实现两值互换
    11. {
    12. t=a[i];
    13. a[i]=a[j];
    14. a[j]=t;
    15. }
    16. printf("排序后的顺序是:\n");
    17. for(i=1;i<=10;i++)
    18. printf("%5d", a[i]); //输出排序后的数组
    19. printf("\n");
    20. return 0;
    21. }
    展开全文
  • 上一篇文章C语言排序方法-----选择排序法中分析了选择排序法,这篇文章分析一下选择排序法的优化算法,二元选择排序法,在选择排序方法中每次找一个最大或者最小的数据放到开始位置,为了提高效率在每次比较的时候...
  • C语言 冒泡法排序选择法排序和插入排序

    千次阅读 多人点赞 2014-12-04 22:56:06
    排序是非常重要且很常用的一种操作,有冒泡排序、选择排序、插入排序、希尔排序、快速排序、堆排序等多种方法。这里我们先简单介绍前三种排序算法和代码实现,其余算法将在后续课程《数据结构》中学习到。 冒泡...
  • C语言实现的九种经典排序算法(直接选择排序、冒泡排序、快速排序、归并排序、直接插入排序、希尔排序、折半插入排序、堆排序、基数排序),运行稳定高效。
  • 找出最大的一个元素,和末尾的元素交换,然后再从头开始,查找第1 个到第N-1 个元素中最大的一个,和第N-1 个元素交换……其实差不多就是冒泡法的思想,但整个过程中需要移动的元素比冒泡法...//选择排序法 void Sea
  • C语言使用指针实现选择法和冒泡对数字排序 前言 刚学到指针章节,遇到的习题大多是将以前写过的代码用指针的方法再写一次,不过说实话,很多写起来并不是我想像的那简单,而且觉得没啥必要,但是据说到链表指针...
  • C语言实现冒泡排序与选择排序

    千次阅读 2018-05-29 17:20:29
    1.选择法:从数组未排序部分中的第一个元素开始,遍历其之后全部元素,并将找出的最小元素与第一个元素交换。...代码实现:void select_sort(double a[],int n) //n为数组大小{ int i,j,m; double tmp; for(i=0;i...
  • 算法思想动画图解选择排序法代码演示测试结果说明 算法思想 比较相邻元素,如果第一个比第二个大,就交换两个元素。 对比每一对相邻的元素不断重复上面操作,从开始第一队到结尾的最后一对。 上面操作会不断找到剩余...
  • 首先来看看选择排序法的定义 核心思想就是先在所有数据中选出一个最大或者最小的数放在第一位,然后再剩下的数据继续选最大或者最小的数放在第二位,依次进行下去直到结束。 下来直接看C代码实现 #define ...
  • 最近学习JAVA , 想着用java实现这两个算法,一敲代码,就发现又忘记了一半, 还好还是一边分析一边回忆敲出来了。 我们这打代码的, 有点像练钢琴和功夫,一日不打就退步,学习初期最重要的还是练手感 。 ps: 本人...
  • C语言 | 选择法对10个数排序

    千次阅读 2021-01-13 20:28:10
    例60:C语言实现用选择对10个整数排序。 解析:选择排序思路如下,设有10个元素a[1]a[10],将a[1]与a[2]a[10],若a[1]比a[2]~a[10]都小,则不进行交换,即无任何操作。 若a[2]a[10]中有一个以上比a[1]小,则将其中...
  • 代码如下: # include <stdio.h> # include <stdlib.h> /* 编写一个程序解决选择问题,令 k = N/2,计算出不同值的运行时间 设一组有N个数而要确定其中的第k个最大者 ,我们称之为选择问题 */ int ...
  • 选择法实现10个整数从大到小排序,采取函数调用方式,从小到大排序只需稍加修改。 1.c语言代码 #include<stdio.h> int main() { void sort(int x[],int n); //sort函数声明 int i,*p,a[10]; //定义数组...
  • 代码实现一维数组的选择排序 选择排序跟冒泡有点类似,冒泡是比较相邻两个元素的大小,并交换元素。 而选择排序则是比较相邻元素的大小以后,记录最小元素或者最大元素在数组中的位置,在每趟循环结束以后交换一次...
  • 代码实现需要注意的是:声明一个数组和两个整形变量,数组用于存储输入的数字,而整形变量用于存储最小的数组元素的数值与该元素的位置,在我的代码中实现为a[] temp position。代码具体如下 #includ...
  • C语言各种排序算法的总结 相信很多同学对排序算法都有了不同程度的理解,这篇文章仅仅是...选择排序法 O(n^2) 冒泡排序法 O(n^2) 插入排序法 O(n^2) 希尔排序法 O(nlog2n) 归并排序法 O(nlog2n) 快速排序法
  • 从前面已经讲解了冒泡排序、选择排序、插入排序,快速排序了,本章主要讲解的是归并排序,希望大家看完能够理解并手写出归并排序快速排序的代码,然后就通过面试了!如果我写得有错误的地方也请大家在评论下指出。 ...
  • 冒泡排序法C语言

    2018-11-24 12:53:00
    常用的排序方法有冒泡排序法,选择排序法,插入排序法以及希尔排序法等。本文着重讲解如何利用C代码实现冒泡排序。 首先,要了解什么是冒泡排序。冒泡排序是常用的一种排序方法,其基本方法就是逐次比较。即一次...
  • 常用的排序方法有冒泡排序法,选择排序法,插入排序法以及希尔排序法等。本文着重讲解如何利用C代码实现冒泡排序。 首先,要了解什么是冒泡排序。冒泡排序是常用的一种排序方法,其基本方法就是逐次比较。即一...
  • 今天讲的比较难的点事冒泡和选择排序,结合代码和自己的理解总结了一下。 语言中,常用的算法有:冒泡排序、快速排序、插入排序、选择排序、希尔排序、堆排序以及归并排序等等。  冒泡排序法(Bubblesort)  所谓...
  • 常见排序算法(冒泡,选择,快速)的C语言实现 冒泡(起泡)  算法要求:用起泡对10个整数按升序排序。  算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j...
  • 代码实现了单链表的创建(头插与尾插)、单链表的遍历、插入节点、删除节点、 判断表空表满、求表长度、选择算法排序等功能
  • 之前自学数据结构的时候看过C语言版的四种基本排序法C语言都忘的差不多了,最近有空就用php将四种排序法重新写了一遍,复习一下日益生疏的算法。直接贴上代码。/*** 打印数据,用于调试* @param var 打印对象*/...
  • C语言中数组的排序算法详解——选择法、冒泡、交换、插入、折半C语言代码实现以及相应注释。可以参考本人另一篇博客关于C语言中数组的排序算法详解。

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 124
精华内容 49
关键字:

c语言选择排序法代码实现

c语言 订阅