算法之直接选择排序

来源:互联网 发布:淘宝上购买 森海塞尔 编辑:程序博客网 时间:2024/06/10 00:28

选择排序的基本思想:每次都从待排序的文件中选择出排序码最小的记录,将该记录放于已排序文件的最后一个位置,直到已排序文件记录个数等于初始待排序文件的记录个数位置。 这种思路导致的结果便是排出来的序列为从大到小;

选择排序主要分:
1. 直接选择排序
2. 树形选择排序
3. 堆排序

直接选择排序

直接选择排序是一种简单的方法,首先从所有的n个待排序的记录中选择排序码最小的记录,将该记录与第一个记录交换,再从剩下的n-1个记录中选择最小的记录与第二个记录做交换。一次循环,知道剩下两个记录时,再从中选出最小的记录与第n-1个记录交换。剩下的那一个记录肯定是最大的记录。
当选出来的i-1个记录放在前i-1个位置,接下来从剩余的n-(i-1)个记录中选出最小的记录与第i个记录交换。这里只要设置一个变量记下在查找过程中最小记录的位置,知道查完n-(i-1)个记录。只要最小的位置不为i,就将最小的排序码对应的记录与第i个记录交换;

void simpleSelectSort(table *tab){int i ,j,k;for(i=1;i<=tab->length-1;i++)//每次选择一个最小的位置,并与第i个位置交换{     k=i;   //用于记录下最小记录的位置     for(j=i+1;j<tab->length;j++)//向右查找更小的记录      {        if(tab->r[j].key<tab->tab->r[k].key)        k=j;  //如果有更小的记录,更改k的位置      }      if(k!=i)     //只要最小的位置不为i,就将最小的排序码对应的记录与第i个记录交换;      {        tab->r[0]=tab->r[k];  //用没有使用的0记录来作为交换的中介        tab->r[k]=tab->r[i];        tab->r[i]=tab->r[0];      }  }} 

直接选择排序
时间复杂度 O(N^2). 使用一个存储记录的附加空间
不稳定;

0 0
原创粉丝点击