算法和数据结构---排序--简单选择排序

从今天开始努力。

头文件。

#define MAXSIZE 20 /* 一个用作示例的小顺序表的最大长度 */
typedef int KeyType; /* 定义关键字类型为整型 */
typedef struct
{
KeyType key; /* 关键字项 */
InfoType otherinfo; /* 其它数据项,具体类型在主程中定义 */
} RedType; /* 记录类型 */
typedef struct
{
RedType r[MAXSIZE+1]; /* r[0]闲置或用作哨兵单元 */
int length; /* 顺序表长度 */
} SqList; /* 顺序表类型 */

 

返回最小值的函数

int SelectMinKey(SqList L,int i)
 { /* 返回在L.r[i..L.length]中key最小的记录的序号 */
   KeyType min;
   int j,k;
   k=i; /* 设第i个为最小 */
   min=L.r[i].key;
   for(j=i+1;j<=L.length;j++)
     if(L.r[j].key<min) /* 找到更小的 */
     {
       k=j;
       min=L.r[j].key;
     }
   return k;
 }

 简单选择排序

void SelectSort(SqList *L)
 { /* 对顺序表L作简单选择排序。*/
   int i,j;
   RedType t;
   for(i=1;i<(*L).length;++i)
   { /*  选择第i小的记录,并交换到位 */
     j=SelectMinKey(*L,i); /* 在L.r[i..L.length]中选择key最小的记录 */
     if(i!=j)
     { /* 与第i个记录交换 */
       t=(*L).r[i];
       (*L).r[i]=(*L).r[j];
       (*L).r[j]=t;
     }
   }
 }

 更简单的用代码表示为

 

void selectsort()
{
   for(int i=0;i<n-1;i++)
 {
     for(int j=i+1;j<n;j++)
    {
       if(x[j]<x[i]) swap(x[j],x[i]);
    }
  }
}

 

posted @ 2012-07-16 22:25  代码改变未来  阅读(355)  评论(0编辑  收藏  举报