• 算法-选择排序


    2、选择排序(Selection Sort)

    选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 

    算法的稳定性: 不稳定 (比如序列【5, 5*, 3】第一趟就将第一个[5]与[3]交换,导致第一个5挪动到第二个5*后面)
      时间复杂度: O(n^2);
      空间复杂度: O(1)-------没有借助辅助空间;

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include<malloc.h>
    #include <string.h>
    
    int SelectSort(int *p, int n)
    {
        int i, j,temp,mini;
        for (i = 0; i < n - 1; i++)
        {
            mini = i;
            for (j = i + 1; j < n; j++)
            {
                if (p[mini] > p[j])
                {
                    mini = j;
    
                }
            }
            temp = p[mini];
            p[mini] = p[i];
            p[i] = temp;
        }
    }
    
    
    
    
    int dayin(int *q,int len)
    {
        int i;
        for (i = 0; i < len; i++)
        {
            printf("%d ", q[i]);
        }
    
    
    }
    
    void main()
    {
        int a[] = { 5,2,4,50,100,3,6,7,8,9 };
        int len = sizeof(a) / sizeof(a[0]);
        SelectSort(a, len);
        dayin(a, len);
       char b[] = {"sdsdsdsd"};
        printf("
    %d", strlen(b));
            
    
    }

     选择排序优化

     简单的选择排序,每趟循环只能确定一个元素排序后的定位,我们可以考虑每趟循环确定两个元素(当前趟的最大和最小记录)的位置,从而减少排序所需的循环次数。改进后对n个

    数据进行排序,最多只需进行【n/2】趟排序即可

    int SelectSort(int *p, int n)
    {
        int left=0, right=n-1,temp=0,min,max,i;
        
        while(left<=right)
        {
            min = left;
            max = left;
            for (i = left+1 ; i <= right; i++)
            {
                if (p[min] > p[i])
                {
                    min = i;
    
                }
                if (p[max] < p[i])
                {
                    max = i;
                }
            }
            temp = p[left];
            p[left] = p[min];
            p[min] = temp;
            if (left == max)
            {
                max = min;
            }
            temp = p[right];
            p[right] = p[max];
            p[max] = temp;
            ++left;
            --right;
        }
    }
  • 相关阅读:
    idHTTP使用代理IP
    Delphi的TRegistry注册表类方法详解
    判断WebBrowser是否加载完成.
    vs2010 安装记
    Delphi中destroy, free, freeAndNil, release用法和区别
    IdHTTP处理HTTP 302遇到的问题
    passcal 多线程例子,线程管理,创建,暂停,中止,等待等。。。
    passcal try嵌套
    passcal 编写多线程程序
    用一个 Byte 数表示 8 个复选框的选择状态
  • 原文地址:https://www.cnblogs.com/cyyz-le/p/10987916.html
Copyright © 2020-2023  润新知