精华内容
下载资源
问答
  • 简单选择排序 C语言

    2020-11-20 12:28:37
    (Simple Selection Sort)也称作直接选择排序。 算法步骤: 1) 设待排序的记录存放在数组Data[1…n]中。第一趟从Data[1]开始,通过n-1次比较,从n个记录中选出关键字最小的记录,记为Data[k],交换Data[1]和Data[k...

    简单选择排序

    (Simple Selection Sort)也称作直接选择排序。

    算法步骤:

    1) 设待排序的记录存放在数组Data[1…n]中。第一趟从Data[1]开始,通过n-1次比较,从n个记录中选出关键字最小的记录,记为Data[k],交换Data[1]和Data[k]。
    2) 第二趟从Data[2]开始,通过n- 2次比较,从n-1个记录中选出关键字最小的记录,记为Data[k],交换Data[2]和Data[k]。
    3) 依次类推,第i趟从Data[i]开始,通过 n - i 次比较,从n-i+1个记录中选出关键字最小的记录,记为Data[K],交换Data[i]和Data[k]。
    4) 经过n-1趟,排序完成。

    书上的例子:
    在这里插入图片描述
    时间复杂度

    O(n2n^2)

    空间复杂度

    O(1)

    算法特点:

    1 ) 就选择排序方法本身来讲,它是一种稳定的排序 方法,但图中例子所表现出来的现象是不稳定的,这是因为上述实现选择排序的算法采用“交换记录”的策略所造成的,改变这个策略可以写出不产生“不稳定现象”的选择排序算法。
    2 ) 可用于链式存储结构。
    3 ) 移动记录次数较少,当每一记录占用的空间较多时,此方法比直接插人排序快。

    完整代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAXSIZE 100  //顺序表最大容量,可以自行加大 
    
    typedef struct 
    {
    	int key;//关键字项 
    	char *otherinfo;//其他数据项 
    }ElemType;//记录类型 
    typedef struct
    {
    	ElemType Data[MAXSIZE+1];//静态顺序表的数据域,这里Data[0]为空闲或者为哨兵单元 
    	int length;//顺序表的长度 
    }SqList;//顺序表 
    
    void InitList(SqList &L)//顺序表的初始化 
    {
    	L.length = 0;//使顺序表长度归0,便是顺序表的初始化 
    }
    
    void CreateList(SqList &L)//顺序表的创建 
    {
    	printf("请输入:"); 
    	while(1)//建立一个死循环,循环终止条件是按了enter键 
    	{
    		L.length++;//顺序表长度加一 
    		if(L.length>MAXSIZE)//判断是否超出最大容纳量 
    		{
    			printf("顺序表已满!\n");
    			return ;
    		}
    		scanf("%d",&L.Data[L.length].key);//顺序表数据的输入 
    		if(getchar() == '\n')//循环终止条件 
    			break;
    	}
    }
    
    void InputList(SqList L)//顺序表的输出 
    {
    	int i;//记录次数 
    	if(L.length == 0)//判断顺序表是否为空 ,若为空结束该函数 
    	{
    		printf("顺序表是空的!\n");
    		return ;
    	}
    	printf("打印为:");
    	for(i=1;i<=L.length;i++)//利用循环打印顺序表中的数据 
    		printf("%d ",L.Data[i].key);	
    }
    
    void SelectSort(SqList &L)//简单选择排序 
    {
    	int i,j,//利用两层循环排序所有关键字 
    		k;//k为记录剩余关键字中最小的位置 
    	for(i=1;i<L.length;i++)//在L.Data[i…L.length]中选择关键字最小的记录 
    	{
    		k = i;
    		for(j=i+1;j<=L.length;j++)
    		{
    			if(L.Data[k].key > L.Data[j].key)//k指向此趟排序中关键字最小的记录 
    				k = j;
    		}
    		if(k != i)//交换Data[i]与Data[k] 
    		{
    			L.Data[0] = L.Data[i];
    			L.Data[i] = L.Data[k];
    			L.Data[k] = L.Data[0];
    		}
    	}
    }
    
    int main()
    {
    	SqList L;
    	InitList(L);//初始化顺序表 
    	CreateList(L);//创建顺序表 
    	SelectSort(L);//简单选择排序 
    	InputList(L);//打印排序后结果 
    	return 0;
    }
    
    

    在这里插入图片描述
    (完)

    展开全文
  • 主要介绍了C语言直接插入排序直接选择排序实现,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,需要的朋友可以参考下
  • 主要介绍了C语言基本排序算法之插入排序直接选择排序实现方法,结合具体实例形式分析了插入排序直接选择排序的定义、使用方法及相关注意事项,需要的朋友可以参考下
  • C语言实现直接选择排序

    千次阅读 2018-05-07 19:15:27
    C语言实现直接选择排序

    直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

    时间复杂度:o(n^2)  稳定性:不稳定

    代码实现如下:

    #include<stdio.h>
    #include<stdlib.h>
    void SeletedSont(int a[],int n)
    {
    	int i,j,kmin,t;
    	for(i=0;i<n-1;i++)
    	{
    		kmin=i;
    		for(j=i+1;j<n;j++)
    		{
    			if(a[j]<a[kmin])  kmin=j;
    		
    		}
    			if(i-kmin){
    				t=a[i];
    				a[i]=a[kmin];
    				a[kmin]=t;
    							}
    	}
     }
     int main(void)
     {
     	int a[7]={3,2,5,8,4,7,6};
     	SeletedSont(a,7);
     	for(int i=0;i<7;i++){
     		printf("%5d",a[i]);
    	 }
    	 return 0;
      } 


    展开全文
  • #include<stdio.h> //直接选择排序 void SelectSort(int a[],int n) { int i,j,temp; for(i=0;i<n-1;i++) { int min = i; for(j=i+1;j<n;j++) { if(a[j]&l...
    #include<stdio.h>
    
    //直接选择排序
    
    void SelectSort(int a[],int n)
    {
        int i,j,temp;
        for(i=0;i<n-1;i++)
        {
            int min = i;
            for(j=i+1;j<n;j++)
            {
                if(a[j]<a[min])
                    min = j;
            }
            if(min!=i)
            {
                temp = a[i];
                a[i] = a[min];
                a[min] = temp;
            }
        }
    }
    
    int main()
    {
        int a[5] = {3,1,7,5,0};
        int n = 5;
        SelectSort(a,n);
        int t;
        for(t=0;t<5;t++)
        {
            printf("%d ",a[t]);
        }
    }
    
    

    有问题,欢迎评论区一起讨论

    本人Hexo博客地址:https://qietingfengyindiary.github.io/

    展开全文
  • 考研-数据结构-C-算法-数组-排序-直接插入   语言:C语言  对一维数组的直接插入排序,过程函数化。 什么是直接插入排序直接插入排序就是将某一个元素与顺序表中元素进行比较,然后插入到相应的位置,使...

    考研-数据结构-C-算法-数组-排序-直接插入

     

    语言:C语言 

    对一维数组的直接插入排序,过程函数化。

    什么是直接插入排序?

    直接插入排序就是将某一个元素与顺序表中元素进行比较,然后插入到相应的位置,使整个顺序表处于有序状态。

    对于插入排序,有三种方法:1.  直接插入排序2. 二分插入排序3.希尔排序

     

    1.为了方便阅读、理解,采取初始化数组的形式输入。当然也是可以放一个输入函数,将数据从命令框中或者直接调用文件函数,从文件中读取,从而获取待排序的数据。

    2.再者就是可以更改存储类型,定义一个LinkType的数据结构,将数据放在链表中。只是存储结构不同,算法的思想是一样的。

    3.没有写C++或者Java的版本,算法的核心都是一样的,只要理解了核心思想,剩下的就是不同语言的表达了。

    // 排序函数
    int InsertSortFun(int array[],int length)
    {
        int temp;
        int k;
        for(k=1;k<length;k++)     //从数组的第二个元素开始,终止于数组长度
        {
            temp=array[k];     //存放抽出来的元素A 
            int j=k;
            while(j>0&&array[j-1]>temp) //如果前一个元素大于A元素
            {
                array[j]=array[j-1];    //前一个元素往后移
                j--;
            }
            array[j]=temp;      //当前位置的原元素已往后移,把A元素填入
        }
    }

     实现排序的基本操作有两个:

    (1)“比较”序列中两个关键字的大小;

    (2)“移动”记录。

    性能分析:

    最好的情况(关键字在记录序列中顺序有序):

    “比较”的次数:

    “移动”的次数:

    0

    最坏的情况(关键字在记录序列中逆序有序):

    “比较”的次数:

    “移动”的次数:

    原始数据越接近有序,排序速度越快

    最坏情况下(输入数据是逆有序的) Tw(n)=O(n2)

    平均情况下,耗时差不多是最坏情况的一半 Te(n)=O(n2)

    要提高查找速度

    1. 减少元素的比较次数

    2. 减少元素的移动次数

    //  完整C代码
    #include <stdio.h>
    #include <stdlib.h>
    
    #define arraysize 5
    
    int InsertSortFun(int array[],int length)
    {
        int temp;
        int k;
        for(k=1;k<length;k++)     //从数组的第二个元素开始,终止于数组长度
        {
            temp=array[k];     //存放抽出来的元素A 
            int j=k;
            while(j>0&&array[j-1]>temp) //如果前一个元素大于A元素
            {
                array[j]=array[j-1];    //前一个元素往后移
                j--;
            }
            array[j]=temp;      //当前位置的原元素已往后移,把A元素填入
        }
    }
    
    void PrintArray(int array[]){   //打印数组的函数 
    	for(int i =0;i < arraysize ;i++)
    	printf("%d ",array[i]);
    }
    
    int main(){
    	
    	int array[arraysize] = {1,3,3,5,4};   //初始化数组 
    	InsertSortFun(array,arraysize);   //调用排序函数 
    	PrintArray(array);   //打印数组,进行输出 
    	return 0;
    } 

    运行结果:

    注:希望各位同行批评指正,多多交流,也希望能够帮助广大研友们。

    展开全文
  • *当第一个数完后,剩下的数就是待排序的数,我们将要从除去9开始的书中选出一个插入到前面合适的位置, *拿到2后,放在tmp上,进行注释中的1处的代码,1处的代码就是通过循环找出这个合适的位置, *发现比tmp大的数...
  • 数据结构直接插入排序完整算法(C语言实现)【待补充…】 这里引用一篇博客写的蛮全面的(已运行) 链接link #include<stdio.h> #define MaxSize 100 typedef int keytype; typedef char infotype; typedef ...
  • 插入排序 对一个元素个数为20个的随机数组进行插入排序 #include <stdio.h> #include <stdlib.h> #include <time.h> void Display(int *a, int n){ for (register int i = 0; i < n; i++){ ...
  • 主要介绍了C++实现选择排序直接插入排序、冒泡排序的代码示例,相当简洁直观,也是算法和数据结构学习中的基础,需要的朋友可以参考下
  • 直接插入排序,根据魏敏洪的c数据结构编的
  • 简单选择排序和冒泡排序一样,都是数据结构中入门的排序算法,其基本思想是遍历待排序列找出最小(最大)的,并将其放在待排序列的第一个(最后一个)。 // 选择最小,放在开头 void SelectSort(int L[],int n) { ...
  • 【算法】直接插入排序C语言实现

    千次阅读 2015-02-06 00:44:48
    我抓牌的习惯是,在抓牌的时候,我要看着我的牌,看看牌的状况,有没有大小鬼,有几个2,有没有长的连,顺便做好基本的排序工作.比如我第一张牌抓的是7,放在手里,第二张牌是J,我把它放在7的后面(对,我默认是左到右升序的的)...
  • 一、直接插入排序 定义顺序表的存储结构 初始化顺序表为空表 输入10个元素创建含有10个元素的顺序表 输出顺序表 对顺序表进行直接插入排序(InsertSort) 输出排序后的顺序表 例如: 11 938 ...
  • 选择排序C语言

    2019-12-23 17:58:49
    选择排序C语言直接选择排序算法思想程序数组实现链表实现二元选择排序算法思想程序 直接选择排序 算法思想 见:3. 选择排序—简单选择排序(Simple Selection Sort) 程序 数组实现 void swap(int *s1, int *s2...
  • 八种基本的排序(2)——直接选择排序C语言实现) 八种基本的排序(3)——插入排序C语言实现) 八种基本的排序(4)——归并排序C语言实现) 八种基本的排序(5)——快速排序C语言实现) ...
  • 直接插入排序、希尔排序直接选择排序、堆排序、冒泡排序、快速排序、归并排序、基数排序。 算法复杂度比较: 算法分类 一、直接插入排序 一个插入排序是另一种简单排序,它的思路是:每次从未排好的序列中选出第一...
  • -八种基本的排序(1)——冒泡排序(C语言实现)八种基本的排序(2)——直接选择排序(C语言实现)八种基本的排序(3)——插入排序(C语言实现)八种基本的排序(4)——归并排序(C语言实现)八种基本的排序(5)——快速排序(C语言...
  • /* 简单选择排序 */ void select_sort(int *p, int len) { int i, j; int min, tmp; for(i=0; i; i++) { min = i; for(j=i+1; j; j++) { if(p[min]>p[j]) { min = j; } } i
  • 希尔排序c语言实现

    千次阅读 2017-10-18 11:48:48
    希尔排序c语言实现
  • 数据结构 各种排序 c语言 完整程序 完成1-20000的排序算法. 直接插入排序 冒泡排序 快速排序 直接选择排序排序 希尔排序
  • 插空排序C语言直接插入排序)

    千次阅读 2017-01-01 20:40:01
    原理:给你一串无序数,先把第一个数当成已经排好的序列,与这个已经排好的序列进行比较,(以从小往大排为例),遇到比自己大的,让其往后走,直到找到逼自己小的,然后插入。 #include int main() ...
  • //实现直接选择排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20 typedef int KeyType; typedef char InfoType[10]; typedef struct { KeyType key; InfoType data; }RecType; ...
  • 文档中总结了多种排序算法,并且使用C语言对其进行编程和说明,在VC上能够跑得通,得到正确排序,同时适合初学者学习
  • 选择排序C语言实现

    千次阅读 2019-04-30 21:00:36
    简单版的选择排序
  • 实现一个直接插入排序C语言函数,要求对要排序的元素按照逐渐递增有序。这个函数的具体实现如下: /* 直接插入排序函数的实现 * array[] : 待排序的数组 * length : 待排序的数组的大小
  • 直接插入排序(C语言)

    千次阅读 2020-06-05 14:08:38
    直接插入排序 1.排序原理 当我们打扑克牌的时候,为了使手中的牌顺序排列,我们平常都会这么做,每抽到一张牌,就会将它直接插入到适当的位置,也就是直接插入排序。 例如:我们手上有1、3、4、5这四张牌,而当我们...
  • 希尔排序 C语言实现

    千次阅读 2020-11-19 18:37:52
    直接插人排序,当待排序的记录个数较少且待排序序列的关键字基本有序时,效率较高。希尔排序基于以上两点,从“减少记录个数”和“序列基本有序”两个方面对直接插入排序进行了改进。 基本思想: 先将整个待排记录...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,871
精华内容 26,748
关键字:

直接选择排序c语言

c语言 订阅