zoukankan      html  css  js  c++  java
  • 各种排序总结(二)直接选择排序

    /***************
    思路:外层循环:从0到n-1遍历数组。
          对于第i个元素,内层循环:从i+1开始遍历数组找到最小的元素,与i交换。
    ****************/
    
    #include <iostream>
    
    using namespace std;
    
    void SelectSort(int* arr, int n)
    {
        int i,j,temp,min_index;
        for(i=0; i <n-1; i++)
        {
            min_index = i;
            for(j=i+1; j<n; j++)
            {
                if(arr[j] < arr[min_index])
                    min_index = j;
            }
            if(i != min_index)
            {
                temp = arr[i];
                arr[i] = arr[min_index];
                arr[min_index] = temp;
            }
        }
    }
    int main()
    {
        int * arr;
        int n;
        cout<<"Input the arr length:"<<endl;
        cin>>n;
        arr = new int[n];
        cout<<"Input the arr elements:"<<endl;
        for(int i=0;i<n;i++)
        {
            cin>>arr[i];
        }
        SelectSort(arr,n);
        cout<<"The outcome:"<<endl;
        for(int i=0;i<n;i++)
            cout<<arr[i]<<endl;
        return 0;
    }
    
    /************************
    不稳定
    时间代价:最大、最小、平均时间代价均为O(n^2)。
    空间代价:一个临时记录,O(1)。
    总结:
    1.由于时间为O(n^2),因此适用于数组n较小的情况。
    2.由于整个排序过程最多n-1次交换,相比于同样时间复杂度的直接插入排序交换次数少,
      因此更适合于数据记录结构较大的情况。(由于移动大记录的时间开销大,选择排序
      可以最少的移动操作节省排序时间)
    ************************/
  • 相关阅读:
    快速入门各种跨域
    常用知识点
    比较少用的格式
    git
    “没有用var声明的为全局变量”这种说法不准确
    类数组对象
    函数上下文的变量对象实例
    var a =10 与 a = 10的区别
    原型链与作用域链、执行上下文
    闭包的作用
  • 原文地址:https://www.cnblogs.com/CnZyy/p/3314635.html
Copyright © 2011-2022 走看看