精华内容
下载资源
问答
  • 简单选择排序和冒泡排序一样,都是数据结构中入门的排序算法,其基本思想是遍历待排序列找出最小(最大)的,并将其放在待排序列的第一个(最后一个)。 // 选择最小,放在开头 void SelectSort(int L[],int n) { ...

    简单选择排序和冒泡排序一样,都是数据结构中入门的排序算法,其基本思想是遍历待排序列找出最小(最大)的,并将其放在待排序列的第一个(最后一个)。

    // 选择最小,放在开头
    void SelectSort(int L[],int n)
    {
        int temp;
        int i,j,k;//i,j指示内外层循环 ,k记录最小值位置
        for(i=0;i<n;i++)
        {
            k=i;
           for(j=i+1;j<n;j++)
           {
             if(L[j]<L[k])
             k=j;   //记录最小值位置
           }
           temp=L[i];
           L[i]=L[k];
           L[k]=temp;  //最小值元素与待排序列第一个交换,一趟排序结束
        }
    }
    

    ps:不同于直接插入和冒泡,简单选择排序的比较次数固定,与序列初始状态无关。

    展开全文
  • /*****************************************************************... Description: 选择排序 > Created Time: 2020年12月09日 星期三 20时14分06秒 *******************************************************
    /*************************************************************************
      > File Name:    choice.c
      > Author:       
      > Description:  选择排序
      > Created Time: 2020年12月09日 星期三 20时14分06秒
     ************************************************************************/
    
    #include <stdio.h>
    int choice(int *buf,int n)
    {
    	int a; //用来记录元素最大的下标
    	int b; //中间变量
    	int i = 0,j = 0;
    	for(i = 0; i < n; i++)
    	{
    		a = i; //默认第一个数字最小
    		for(j = i+1; j < n; j++)
    		{
    			if (buf[j] < buf [i])
    				a = j; 
    		}
    		if (a != i)
    		{
                b = buf[i];
    			buf[i] = buf[a];
    			buf[a] = b;
    		}
    	}
    	return 0;
    }
    int main(int argc,char *argv[])
    {
    	int i = 0;
    	int a[5] = {3,6,9,2,0};
    	choice(a,5);
    	for(i = 0;i<5;i++)
    	{
    		printf(" %d ",a[i]);
    	}
    	putchar('\n');
    
        return 0;
    }
    
    展开全文
  • 选择排序——C语言代码

    万次阅读 多人点赞 2018-07-08 11:18:56
    介绍选择排序下面是我在网上找的示例图,便于更好地理解选择排序通过这个图我们明白K只是一个标记,它标记的是比较中 小的数。我们第一轮我们可以找到所有数中最小的数,然后让它和处于第一位的数进行位置交换,第二...

    介绍选择排序


    下面是我在网上找的示例图,便于更好地理解选择排序


    通过这个图我们明白K只是一个标记,它标记的是比较中 小的数。我们第一轮我们可以找到所有数中最小的数,然后让它和处于第一位的数进行位置交换,第二轮比较时 ,第一轮找出的最小数不在参加比较,然后我们可以找出剩下数中最小的数,之后的每轮同理。

    下面大家看一下我的代码


    首先要明白

    for(j=i+1;j<=9;j++)
    {
    if(a[k]>a[j]) 
    {
    k=j;  
    }

    }

    这个for循环完成后才会进行下面的这个if交换

    if(k!=i)
                
    {
    t=a[k];
    a[k]=a[i];
    a[i]=t;

    }

    然后进行第一个for,第二个for,第一个if,接着第二个for完成后,进行第二个if判断,判断完之后进行第一个for

    这就是循环的步骤


    如有错误,欢迎指正

    展开全文
  • 选择排序程序: 将最小的与第一个交换,将次小的与第二个交换,……。 数组大小及数组内容(含类型)自定。
  • 1.希尔排序 /*希尔排序*/ #include<stdio.h> #define N 50000 /*数组的最大容量*/ void xier_paixu(int *shuju, int n, int p) { int zengliang,shu,zho...

    1.希尔排序

    /*希尔排序*/
    #include<stdio.h>
    #define N 50000   /*数组的最大容量*/
    
    void xier_paixu(int *shuju, int n, int p)
    {
        int zengliang,shu,zhongjie;
        if(p>0)   /*递归一直到对每个数的插入排序*/
        {
           for(zengliang=p;zengliang<n;zengliang++)    /*间隔分组进行插入排序*/
           {
            zhongjie=*(shuju+zengliang);     /*确定要插入的数*/
            for(shu=zengliang-p;shu>=0&&zhongjie<*(shuju+shu);shu-=p) /*zengliang-p即确定了间隔此后就按这个间隔把数据分组*/
            {
             *(shuju+shu+p)=*(shuju+shu);/*后移(按间隔)比要插入数大的数据*/
            }
            *(shuju+shu+p)=zhongjie;   /*因为最后还往前移了个shu-=p此处+p移到要插入的位置处*/
           }
           xier_paixu(shuju,n,p/2);   /*此处递归*/
        }
    }
    
    int main()
    {
    
        double t2=clock();
        int i,j,a[N],*sj=a;
        int flag=1;
        int temp;
        for(i=0;i<N;i++)
        {
            a[i]=rand()%N;
        }
        xier_paixu(sj,N,N/2);
        t2=clock()-t2;
        //打印排序后的数组
        for (i=0; i<N ; i++)
        {
            printf("%d\n",a[i]);
        }
        printf("\n希尔排序%d个随机数字所用时间为:%f毫秒\n",N,(double)t2);
        getch();
        return 1;
    }

     

    2.插入排序

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>
    
    #define N 50000
    
    void insert_sort(int *a,int n);
    
    /*
    函数功能:使用插入法进行排序:从小到大; 
    函数原型:void insert_sort(int *a,int n) 
    函数参数:int *a:数组名
              int n :排序元素数 
    函数返回值:void 
    */
    void insert_sort(int *a,int n)
    {
      int i,j,x;
      for(i=1;i<n;i++)
      {
      x=a[i];
      j=i-1;
      
      while(j>=0&&a[j]>x)
      {
        a[j+1]=a[j];
         j--;
       }
       a[j+1]=x;
         
      }
    }
    
    
    /*main 函数*/
    int main()
    {
        double t2=clock();
        int i,j,a[N];
        int flag=1;
        int temp;
        for(i=0;i<N;i++)
        {
            a[i]=rand()%N;
        }
    
        insert_sort(a,N);
        t2=clock()-t2;
    
        //打印排序后的数组
        for (i=0; i<N ; i++)
        {
            printf("%d\n",a[i]);
        }
        printf("\n插入排序%d个随机数字所用时间为:%f毫秒\n",N,(double)t2);
        getch();
        return 1;
    }

     

    3.直接选择排序

    #define N 50000
    
    void StraightSelectionSort(int array[], int n)
    {
     /*
      注:关键字值类型为int,数组的索引是从0开始
     1. 初始状态无序区为array【0, n - 1】,有序区为空。
     2. 第1趟排序从array【0, n - 1】中找到下标为k的关键字最小值,把array【k】和
      array【0】交换。现在无序区为array【1, n - 1】, 有序区为array【0, 0】。
      第2趟排序...
      第3趟排序...
      ...
     3. 第i趟排序(1 <= i <= n - 1),从array【i, n - 1】中找到下标为j的关键字最小值,把
      array【j】和array【i - 1】交换,如果i == n - 1,则排序结束,否则继续3步骤。
     */
    
     /* 总共需要n - 1次排序,从1到n - 1 */
     int i;
     for ( i = 1; i <= n - 1; i++)
     {
      /* k值从0到n - 2, 最后一个记录关键字值必定是最大的 */
      int k = i - 1;
      int swap = 0;
      int j;
      /* 这个for循环找到第i趟排序中无序区关键字值最小记录的下标 */
      for ( j = i; j < n; j++)
      {
       if (array[j] < array[k])
       {
        k = j;
       }
      }
      /* 如果数组中紧接有序区的无序区的第一个记录就是无序区中关键字值最小的,则不用交换 */
      if (k != (i - 1))
      {
       swap = array[i - 1];
       array[i - 1] = array[k];
       array[k] = swap;
      }
     }
     /*
      算法分析
     1. 关键字比较次数。
      无论记录的初始状态,比较次数都是1 + 2 + 3 + 4 + ... + (n - 1) = n * (n -1) / 2;
     2.  记录移动次数。
      最好情况下0次, 正序, 最坏情况下3 * (n - 1)次, 反序。
      那么直接选择排序的时间复杂度就是:O(n * n)。
     3. 直接选择排序是一个就地排序。辅助空间O(1)。
      非就地排序一般要求的辅助空间为O(n)。
     4.  直接选择排序不稳定的。
      反例 
      下标:【1 2 3】
      关键字值:2 2 1
      进过直接选择排序第一个2和第二个2相对位置发生了改变。
     */
    }
    int main ()
    {
        double t2=clock();
        int i,j,a[N];
        int flag=1;
        int temp;
        for(i=0;i<N;i++)
        {
            a[i]=rand()%N;
        }
        
        StraightSelectionSort(a,N);
        t2=clock()-t2;
        //打印排序后的数组
        for (i=0; i<N ; i++)
        {
            printf("%d\n",a[i]);
        }
        printf("\n直接选择排序%d个随机数字所用时间为:%f毫秒\n",N,(double)t2);
        getch();
        return 1;
        
    }

     

    希尔排序的时间性能最好。。。。

    转载于:https://my.oschina.net/wangwang110/blog/11128

    展开全文
  • 一个选择排序是一种简单排序,它的排序思路是:每次从未排序的序列中选出一个最小值,并把它放在已排好序的序列的序尾。这样就形成了一个有序序列(从小到大)。 时间复杂度:o(n^2) 核心代码: void Selection_...
  • void Pai(int arr[]) { int tmp; for(int i=0; i<10;i++) { for(int j=i+1; j<10;j++) { if(arr[i]>arr[j]) { tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } } for(int i=0;...printf("...
  • 选择排序 对一个元素个数为20个的随机数组进行选择排序 #include <stdio.h> #include <stdlib.h> #include <time.h> void swap(int &a, int &b){ int tmp = a; a = b; b = tmp; } ...
  • 选择排序c语言实现

    2021-05-23 19:25:24
    今天在写软考题的时候,又遇上了排序,我居然想不起来选择排序是怎么排序的了,所以找了段代码 #include<stdio.h> int main(void) { int i,j; int MinIndex; int buf; printf("请输入数组a\n"); int a[5...
  • 课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的
  • 运行程序先输入一个数,为数组的长度,代码会随机生成一个数组,然后分贝用选择排序和冒泡排序实现从小到大的排序. 实验结果: 代码: #include <iostream> #include <cstdlib> #include <ctime>...
  • 求救线性时间选择排序 这个代码是我自己靠思路写的,问题不断,请各位大佬,指定下,哪些地方问题很大,哪些地方可以提升提升 #include<stdio.h> #include<stdlib.h> int funcation(int *a,int p,int q,...
  • 通过本文大家就知道选择排序法的原理了!
  • 选择排序 冒泡排序 代码在此: #include #define SIZE 100 void BubbleSort (int a[], int n) { //冒泡排序 int i,j; int temp; for(i = 0; i ; i ++){ for(j = n-1; j > i; j --){ if(a[j] [j...
  • 主要介绍了C++中实现选择排序、冒泡排序和快速排序的代码示例,例子带有执行时间统计还可以简单看一下效率对比,需要的朋友可以参考下
  • 而应该是继续排序剩下来的所有数字,∴ j<N */ //如果有比min这个下标数组的值还要小的数,就标记住这个数,继续参与比较,这么下来,min标记的一定是最小值 if(x[min]&...
  • 本篇文章主要介绍了 C语言选择排序算法,这里提供代码实例以便大家理解,通过本文,更好的理解排序算法
  • 排序算法的C语言代码

    2014-02-26 16:10:59
    常见的排序算法大致分为四类: 1.插入排序:插入排序(insert.c)、...2.选择排序选择排序(selectsort.c)、堆排序(heapsort.c) 3.交换排序:冒泡排序(bubblesort.c)、快速排序(quicksort.c) 4.归并排序(mgergesort.c)
  • 概述:堆排,实际上是一种选择排序,只不过采用了堆这种数据结构,利用这种数据结构,使得在每次查找最大元素时,直接选取堆顶元素,从而时间大大缩短,相对简单选择排序算法来说,比较高效。 堆排序算法可描述如下...
  • 课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的
  • 排序代码c语言

    2020-03-15 18:32:06
    选择排序 #include <stdio.h> #include <stdlib.h> /*冒泡排序1,未优化*/ void bubbleSort_1(int* arr,int len); /*冒泡排序2,优化过*/ void bubbleSort_2(int* arr,int len); /*...
  • 本文主要介绍C语言 选择排序算法,这里对排序算法做了详细说明,并附代码示例,有需要的小伙伴可以参考下

空空如也

空空如也

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

选择排序c语言代码

c语言 订阅