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

    2020-03-18 23:07:31
    #include<stdio.h> int main() { int a[10]; int n,i,k,j; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<n;i++) { k=i;//k记录当下最小元素的位置 ......
    #include<stdio.h>
    int main()
    {
    	int a[10];
    	int n,i,k,j;
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	{
    		scanf("%d",&a[i]);
    	}
    	for(i=0;i<n;i++)
    	{
    		k=i;//k记录当下最小元素的位置
    		for(j=i+1;j<n;j++)
    		{
    			if(a[j]<a[k])
    			{
    				k=j;
    			}
    		}
    		if(k!=j)
    		{
    			int temp=a[k];
    			a[k]=a[i];
    			a[i]=temp;
    		}
    	}
    	for(i=0;i<n;i++)
    	{
    		printf("%d ",a[i]);
    	}
    }
    
    展开全文
  • [C语言] 选择排序之直接选择排序的特性及实现 1、算法特性 直接选择是一种简单、不稳定的选择排序方法,属于最为基础的排序方法之一。 其时间复杂度最好情况为O(n²)、最差为O(n²)、平均为O(n²),空间复杂度...

    [C语言] 选择排序之直接选择排序的特性及实现

    1、算法特性

    直接选择是一种简单、不稳定的选择排序方法,属于最为基础的排序方法之一。

    其时间复杂度最好情况为O(n²)、最差为O(n²)、平均为O(n²),空间复杂度为O(1)。

    2、算法思路:

    以升序排列为例,先设置一个临时变量index_nmax存储最大值的下标,初始一般假设为下标0,再将选定值与其之后的数据依次比较:当比较值比选择值大时,index_nmax更新为比较值的下标,之后继续检索,直到无序序列结束为止;当比较值小于等于插入值时,index_nmax不更新,选择值继续向后检索,直到无序序列结束为止。一轮循环过后将arr[index_nmax]与无序序列队尾交换位置,经过len-1循环便可以将所有数据排列有序。

    下图与本博客算法本质上是相同的,博客中选择最大值来排序,图中是选择最小值来排序:

    在这里插入图片描述

    #include <stdio.h>
    int main()
    {
        int select_sort(int arr[], int len);
        int arr[] = {53, 82, 9, 233, 43, 14, 55, 9, 4, 67};
        int len = sizeof(arr) / sizeof(arr[0]);
        select_sort(arr, len);
        printf("排序后:\n");
        for (int i = 0; i < 10; i++)
            printf("%4d", arr[i]);
        return 0;
    }
    int select_sort(int arr[], int len)
    {
        //存放数组arr中元素的个数
        int i, j;                     //循环变量
        int min;                      //保存最小的值的下标
        int buf;                      //互换数据时的临时变量
        for (i = 0; i < len - 1; i++) //n个数比较n-1轮
        {
            min = i;
            for (j = i + 1; j < len;j++) //每轮比较n-1-i次, 找本轮最小数的下标
            {
                if (arr[min] < arr[j])
                {
                    min = j; //保存小的数的下标
                }
            }
            if (min != i) /*找到最小数之后如果它的下标不是i则说明它不在最左边, 则互换位置*/
            {
                buf = arr[min];
                arr[min] = arr[i];
                arr[i] = buf;
            }
        }
    }
    
    
    展开全文
  • 主要介绍了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;
      } 


    展开全文
  • 主要介绍了C语言中直接插入排序与直接选择排序实现,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,需要的朋友可以参考下
  • 主要介绍了C语言基本排序算法之插入排序与直接选择排序实现方法,结合具体实例形式分析了插入排序与直接选择排序的定义、使用方法及相关注意事项,需要的朋友可以参考下
  • 掌握常用排序算法的特点,以便根据实际情况选择使用。 (1)、生成200000个随机整数; (2)、分别利用直接插入、快速排序实现排序; (3)、根据实验结果验证程序,并比较二种排序算法; 三、实验原理、方法和手段 排序是...

    一、实验目的

    通过本实验的学习,掌握几种典型的内部排序方法、特点,培养利用排序知识解决问题的能力。 二、实验内容

    分别实现直接插入排序、快速排序,并随机生成200000个数,比较各算法的时、空性能和稳定性。掌握常用排序算法的特点,以便根据实际情况选择使用。

    (1)、生成200000个随机整数;

    (2)、分别利用直接插入、快速排序实现排序;

    (3)、根据实验结果验证程序,并比较二种排序算法;

    三、实验原理、方法和手段

           排序是将一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列,通常是按照某种规则把数据的顺序重新整理。排序方法多样,但就其基本操作而言,大致分为插入排序、交换排序、选择排序、归并排序等。 直接插入排序是基于插入的排序,快速排序是基于元素交换的排序,而堆排序则是基于选择的排序,这是三种典型的排序方法。 首先考虑如何生成1000个随机整数,然后分别使用这二种排序方法对其进行排序。二种算法性能的比较可以通过记录它们的运行时间(思考:如何计时)实现, 但仅通过一次执行时间的比较就断言优劣是不够客观的,合理的做法应该是每个算 法都执行若干次,其中每次的记录都是随机生成的,最后通过比较它们的平均运行时间才是相对合理的选择。

    C语言代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #define MAXSIZE 20001
    int *CreateArray(int *arr)
    {
    	int i;
    	int num;
    	for(i=1;i<MAXSIZE;i++)
    	{
    		num=rand();					//产生随机数 
    		arr[i]=num;
    		printf("%d    ",arr[i]); 
    	}
    	return arr;
    }
    
    void InsertSort(int arr[])			//直接插入排序 
    {
    	int i,j;
    	clock_t start,finish;
    	start=clock();
    	for(i=2;i<MAXSIZE;i++)
    	{
    		if(arr[i]<arr[i-1])
    		{
    			arr[0]=arr[i];
    			for(j=i-1;arr[0]<arr[j];j--)
    				arr[j+1]=arr[j];
    			arr[j+1]=arr[0];
    		}
    	}
    	finish=clock();
    	printf("直接插入排序用时:%f秒\n",(double)(finish-start)/CLOCKS_PER_SEC);	
    /*	printf("\n\n\n\n\n直接插入排序:\n");
    	for(i=1;i<MAXSIZE;i++)
    	{
    		printf("%d  ",arr[i]);
    	}*/
    	
    }
    int partition(int arr[], int low, int high)
    {
        int key;
        key = arr[low];
        while(low<high)
    	{
            while(low <high && arr[high]>= key )
                high--;
            if(low<high)
                arr[low++] = arr[high]; 
            while( low<high && arr[low]<=key )
                low++;
            if(low<high)
                arr[high--] = arr[low];
        }
        arr[low] = key;
        return low;
    }
    void QuickSort(int arr[], int start, int end)
    {
        int pos;
        if (start<end)
    	{
            pos = partition(arr, start, end);
            QuickSort(arr,start,pos-1);
            QuickSort(arr,pos+1,end);
        }
    }
    int main()
    {
    	int arr[MAXSIZE],b[MAXSIZE];
    	int *a=CreateArray(arr);
    	int i;
    	for(i=1;i<MAXSIZE;i++)
    	{
    		b[i]=a[i];
    	}
    	clock_t start1,end1;	
    	InsertSort(a);	
    	start1=clock();
    	QuickSort(b,1,MAXSIZE-1);
    	end1=clock();
    	printf("快速排序用时:%f秒\n",(double)(end1-start1)/CLOCKS_PER_SEC);
    /*	printf("\n\n\n\n\n快速排序:\n");
    	for(int i=1;i<MAXSIZE;i++)
    	{
    		printf("%d  ",a[i]);
    	}*/	
    }
    

     

    展开全文
  • #include&amp;lt;stdio.h&amp;gt; int main() { int i,j,n,temp; scanf(&quot;%d&quot;,&amp;amp;n); int arr[n]; for(i=0;i&amp;lt;n;i++) { scanf(&... }
  • C语言选择排序

    2014-01-18 22:48:04
    选择排序  选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录... 简单选择排序(simple selection sort)也是直接选择排序。此方法在一些高级语言课程中做过介绍,是一种较为容易理解的方法。 1.算法思想
  • 直接插入排序基本思路:1. 从a[0]开始,也就是从1个元素开始是有序的,a[1]~a[n-1]是无序的。2. 从a[1]开始并入前面有序的数组,直到n-1。#include #define N 5void insertsort(int a[], int n);void swap(int *x, ...
  • c语言——直接选择排序算法

    千次阅读 2018-12-05 15:34:27
    #include #include #include #define number 10 void xuanze(int a[],int n) { int i,j,t,k; for(i=0;... printf("排序后:\n"); for(i=0;i;i++) { printf("%d ",a[i]); } return 0; }  
  • 实现各个排序算法(直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序) #include<stdio.h> #define MaxSize 20 #include<windows.h> typedef int KeyType; //定义关键字类型 typedef ...
  • /* 简单选择排序 */ 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
  • 直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序、快速排序、归并排序、基数排序。 算法复杂度比较: 算法分类 一、直接插入排序 一个插入排序是另一种简单排序,它的思路是:每次从未排好的序列中选出第一...
  • 1、直接插入排序 1 #include<stdio.h> 2 3 struct node 4 { 5 int key; 6 }; 7 typedef struct node DataType; 8 9 int Ins_Sort(DataType Ar[],int n); 10 11 int main(void) 12 {...
  • // 选择排序 冒泡排序 直接插入排序 #include <stdio.h> int main(void) { int a[]={3,5,1,2,7,8,9}; int len=0; int i,j,k; int tmp=0; len=sizeof(a)/sizeof(a[0]);//求数组长度 for(i=0;i<len;i...
  • 选择排序原理2.代码分析 前言 前面的冒泡排序讲得有点冗长,废话太多,请堵着门见谅!今天的选择排序尽量精简。但是选择排序有点抽象,我当初学的时候也是搞了很久才明白,所以就算看不懂也要树立信心,学习是循序渐...
  • C语言选择排序

    2013-03-14 21:53:22
    那个怎么说呢。。感觉没什么好说的。...这次就直接上代码、不多说了。。 ——代码来自《学通C语言的24堂课》 #include <stdio.h> int main() { int i, j ; int a[10] ; int iTemp ; ...
  • 对10个数进行排序(1)-直接选择排序 程序分析 直接选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n^2)的时间复杂度,所以一般用在数据规模较小的时候,这个算法唯一的优点就是不占用额外的内存空间 ...
  • 直接插入算法,每次将未排序的第一个元素插入到前半部分以及排好序的元素中。关键是要在已排好的部分进行移位操作。//直接插入排序算法 void InsertSort(int a[],int n) { for (int i = 1; i &lt; n; i++) { ...
  • C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些。 简单交换法排序 1 /*简单交换法排序 2 根据序列中两个记录键值的比较结果来...
  • /* Name: selectSort and insertSort ... Author: 润青 Date: 01/10/18 19:30 ... Description: 实现了简单选择排序直接插入排序 */ #include<stdio.h> int a[100]; int n; vo...
  • 快速排序是在冒泡排序的基础上,找出那个最小的或者最大的,但是不是直接交换,而是记下它的下标,最后把开头和这个下标的元素交换。 快速排序算法是不稳定的排序算法,比冒泡排序算法稍微快一点。 以...
  • 001 #include 002 #include 003 int main() 004 { 005  int L[11]={0,70,38,65,97,... //0不做排序只是当做哨兵,或者临时交换空间使
  • //C语言程序----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)//调试成功运行#include "iostream"#include "stdlib.h"#include "stdio.h"#include "malloc.h"typedef struct{int key;...

空空如也

空空如也

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

c语言直接选择排序

c语言 订阅