47_选择排序和插入排序

关键词:选择排序、插入排序

0. 选择排序

每次(例如第i次,i = 0, 1, 2, ..., n-2)从后面n-i个待排的数据元素中选出关键字最小的元素,作为有序元素序列第i个元素。

选择排序原理图

template < typename T >
    static void Select(T array[], int len, bool min2max = true)     // O(n^2)
    {
        for(int i=0; i array[j]) : (array[min] < array[j]) )
                {
                    min = j;
                }
            }

            if( min != i )
            {
                Swap(array[i], array[min]);
            }
        }
    }

1. 插入排序

思想:当插入第i(i>=1)个数据元素时,前面的v[0], v[1], ...,v[i-1]已经排好序,这时,用v[i]的关键字与v[i-1],...,v[0]的关键字进行比较,找到位置后将v[i]插入,原来的位置上的对象向后顺移。




template < typename T >
    static void Insert(T array[], int len, bool min2max = true)
    {
        for(int i=1; i=0 && (min2max ? (array[j]>value) : (array[j]

2. 小结

  • 选择排序每次选择未排元素中的最小元素
  • 插入排序每次将第i个元素插入前面i-1个已排元素中
  • 选择排序是不稳定的排序法,插入排序是稳定的排序方法
  • 选择排序和插入排序的时间复杂度为O(n^2)

声明:此文章仅是本人在学习狄泰学院《数据结构实战开发教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

你可能感兴趣的:(47_选择排序和插入排序)