算法之选择排序【C语言】

来源:互联网 发布:纳尔逊勋爵 知乎 编辑:程序博客网 时间:2024/05/16 09:13

选择排序

思想:在一组数据中,遍历并找到最小(大)值,与第0位交换,然后从第1位开始遍历,找到次小(大)值,与第1位交换,以此类推,直到数据按照一定顺序排列。

循环不定式:

初始化:把第0位当作最小值,遍历第1位至数组末尾,找到最小值,与第0位交换;

保持:把第n位当作从n开始到数组末尾的最小值,遍历第n+1位至数组末尾,找到最小值,与第n位交换;

终止:直到遍历到数组末尾。

时间复杂度:O(n2)

代码如下:

#include <stdio.h>#define MAXSIZE 10void select_sort(int array[]);/** * 选择排序,从小到大排序 */void select_sort(int array[]){    int index;//索引,当前要存储最小值的位置    int tmp_index;//索引,当前遍历值的位置    int small_index;//索引,当前遍历值中最小值的位置    int small_value;//当前范围内的最小值    index = 0;    while(index < MAXSIZE)//存储最小值的位置要小于数组个数,当位置等于索引个数时,说明排序完毕    {        small_value = array[index];//当前位置的值作为最小值        small_index = index;        tmp_index = index + 1;//从当前位置的下一个位置开始遍历,直到数组最后一个元素        while(tmp_index < MAXSIZE)        {            if(small_value > array[tmp_index])//在当前范围内,查找最小值及其位置            {                small_value = array[tmp_index];                small_index = tmp_index;            }            tmp_index ++;        }        if(small_index != index)//如果找到比当前位置的值更小的值,更换当前位置的值与最小值调换        {            array[small_index] = array[index];            array[index] = small_value;        }        index ++;    }}/** * 主程序 */ int main() {     int array[MAXSIZE] = {4,-2,2,0,-1,3,5,1,4,7};//待排序的数组     int index = 0;//索引     //打印原有数组     printf("Oringin array: ");     while(index < MAXSIZE)     {         printf("%d ",array[index]);         index++;     }     printf("\n");     //排序     select_sort(array);     //打印排序后数组     index = 0;     printf("Sort array: ");     while(index < MAXSIZE)     {         printf("%d ",array[index]);         index++;     }     printf("\n");     return 0; }


 

原创粉丝点击