选择排序

来源:互联网 发布:淘宝的运营模式是什么 编辑:程序博客网 时间:2024/06/06 09:53
  1. 此方法移动元素的次数比较少,但是不管序列中元素初始排列状态如何,第 i 趟排序都需要进行 n - i 次元素之间的比较,因此总的比较次数为(n - 1) + (n-2)+.....2+1=n(n-1)/2, 时间复杂度是 O(n^2)
#include <stdlib.h>  
#include <stdio.h>  
  
void selectSort(int array[], int n)  
{  
    int i, j, d;  
    int temp;  
    for(i = 0; i < n - 1; ++i)  
    {  
        d = i;   //开始一趟选择排序,假定第i个元素是后面n - i + 1个未排序的元素中最小的元素  
        for(j = i + 1; j < n; ++j)  
            if(array[j] < array[d])  //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标d  
                d = j;  
  
        if(d != i)   //如果最小元素的下标不是后面n - i + 1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置  
        {  
            temp = array[d];  
            array[d] = array[i];  
            array[i] = temp;  
        }  
    }  
}  
  
int main()  
{  
    int array[] = {3, 1, 15, 11, 89, 5};  
    int size = sizeof(array)/sizeof(int);  
    selectSort(array, size);  
  
    for(int i = 0; i < size; ++i)  
    {  
        printf("%d ", array[i]);  
    }  
    printf("\n");  
}  
0 0