background image

==========
算法思想简单描述:

 在要排序的一组数中,选出最小的一个数与第一个位置的数交换;
 然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环
 到倒数第二个数和最后一个数比较为止。 

 选择排序是不稳定的。算法复杂度 O(n2)--[n 的平方]
==========================================
===========
*/
void select_sort(int *x, int n)
{
 int i, j, min, t;

 for (i=0; i<n-1; i++) /*要选择的次数:0~n-2 共 n-1 次*/
 {
  min = i; /*假设当前下标为 i 的数最小,比较后再调整*/
  for (j=i+1; j<n; j++)/*循环找出最小的数的下标是哪个*/
  {
   if (*(x+j) < *(x+min))
   {   
    min = j; /*如果后面的数比前面的小,则记下它的下标*/
   }
  }  
  
  if (min != i) /*如果 min 在循环中改变了,就需要交换数据*/
  {
   t = *(x+i);
   *(x+i) = *(x+min);
   *(x+min) = t;
  }
 }
}

/*
==========================================
======
 功能:直接插入排序
 输入:数组名称(也就是数组首地址)、数组中元素个数
==========================================
======
*/