• 排序(1)———选择排序及其优化


    一 选择排序

    对于一般的选择排序,对于我们来说已经很熟悉了,代码如下:

    void _sort(int a[],int n)//从小到大排序
    {
        int i,j,temp;
        for(i=0;i<n-1;i++)
        {
            for(j=i+1;j<n;j++)
            {
                if(a[i]>a[j])
                {
                    temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
            }
        }
    }

    这种选择排序存在缺陷,如果我输入

    5
    
    1 2 3 4 5

    它实际上是不需要排序的。

    那么,如何对选择排序进行改进呢?

    1.不妨定义一个变量 k(标记变量),来标记本轮比较中最小的位置,假设初始元素a[i]最小,将其下标作为标记变量的初始值 k = i。

    2.然后让后面的所有元素 a[i] 分别与 a[k] (最小值)作比较,如果比 a[k] 还小,只需要将最小值下标 j 赋给变量k即可。

    3.在外循环结束后,标记的变量如果不指向初始元素(即判断i与k是否相等),说明最小值不在初始位置,这时候让初始元素与标记位置的元素进行交换即可,如果指向初始元素,则不需交换。

    代码如下:

    void _sort(int a[],int n)
    {
        int i,j,temp,k;
        for(i=0;i<n-1;i++)
        {
            k=i;
            for(j=i+1;j<n;j++)
            {if(a[k]>a[j])
                   k=j;
            }
            if(i!=k)
            {
                temp=a[i];
                a[i]=a[k];
                a[k]=temp;
            }
        }
    }
  • 相关阅读:
    如何写Makefile?
    C语言变量的存储类别详解
    Longest Palindrome Substring
    Count Primes
    Closest Binary Search
    Search Insert Position
    Set Matrix Zeros ****
    Search for a Range
    Two Sum II
    Jump Game
  • 原文地址:https://www.cnblogs.com/PlayfulBlueMoon/p/12189437.html
Copyright © 2020-2023  润新知