直接选择排序

来源:互联网 发布:淘宝权限管理 编辑:程序博客网 时间:2024/06/08 16:48

直接选择排序算法对待排序的记录进行n-1次选择,第i次操作选择第i大的记录放在第i个位置上。即每次都将一个记录放在他的最终位置上。

#include<stdio.h>void selectSort(int *array, int n) {    int i, j, m, a;    for (i = 0; i < n - 1; i++) {        m = i;        for (j = i + 1; j < n; j++) {            if (*(array + j) < *(array + m))                m = j;        }        if (m != i) {            a = *(array + m);            *(array + m) = *(array + i);            *(array + i) = a;        }    }}void main() {    int i;    int array[10] = { 12,2,37,34,90,82,23,46,21,9 };    printf("待排序数组:");    for (i = 0; i < 10; i++)        printf("%d ", *(array + i));    getchar();    selectSort(array, 10);    printf("\n直接选择排序后的数组为:");    for (i = 0; i < 10; i++)        printf("%d ", *(array + i));    printf("\n\n");}

时间复杂度:选择排序最大的优点就是赋值次数少。直接选择排序中,所需进行记录移动的操作次数较少,最小值是0,最大值是3(n-1)/2。无论初始排列如何,需要进行的关键字的比较次数是相同的,都是n(n-1)/2。总的时间复杂度也是O(n^2)。
空间复杂度:直接选择排序是就地排序,空间复杂度是O(1)。
稳定性:不稳定。
改进:选择排序的主要操作是进行关键字的比较,因此改进直接选择排序应该考虑如何减少比较次数,基于以上思想提出了树形选择排序算法和堆排序算法。

0 0