zoukankan      html  css  js  c++  java
  • 算法-选择排序

    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;
        }
    }
  • 相关阅读:
    linux命令
    常用正则表达式总结
    List集合对象根据字段排序
    IO字 节流/字符流 读取/写入文件
    Jquery广告浮动效果小案例
    拿到添加对象的id号方法
    Jquery省市区三级联动案例
    JAVA集合迭代遍历和特性介绍
    Listener监听器使用小案例
    java中用过滤器解决字符编码问题
  • 原文地址:https://www.cnblogs.com/cyyz-le/p/10987916.html
Copyright © 2011-2022 走看看