排序算法实现一

上一篇 / 下一篇  2010-03-19 14:38:47 / 个人分类:数据结构

---直接插入排序-------------------------
void directInsert(int []arrs)
{
     //由小到大排序数组
    //直接插入为稳定的排序算法
     int indx,temp,j, lens = arrs.Length;
     for (indx = 1; indx < lens; indx++)
      {
          j = indx;//定位已排序序列范围
          temp = arrs[indx];//待插入值
          while (j>0&&arrs[j - 1] > temp)//前面有序序列中每个值与待插入值比较
          {
              arrs[j] = arrs[j - 1]; //有序序列向后挪位置给待插入值
               j--;
           }
           arrs[j] = temp;//待插入值插入到合适的位置
       }
}
---------------------------------------
---折半插入排序-------------------------
void halfinsertSort(int[]arrs)
{
  //由小到大排序
  //折半插入排序为稳定的排序算法
  int indx, temp, j, lens = arrs.length;
  int low, mid, high;
  for (indx = 1; indx < lens; indx++)
  {
    temp = arrs[indx];
    high=indx-1;
    low=0;
    while(low<=high){
     mid =(low + high)/2;
     if(arrs[mid] >temp){
      high=mid-1;//向下比较
      }
     else{
      low=mid+1; //向上比较
      }
    }
    for(j=indx-1; j>=low; j--)//low至indx-1间有序值后移
    {
     arrs[j+1] = arrs[j];
    }
    arrs[low]=temp; //插入值
  }           
}
---希尔排序--------------------------------------
void shellSort(int[]arrs)
{ //非稳定的排序算法
  int lens = arrs.Length;
  int dis=lens/2,indx,temp;
 while(dis>=1)
 {
   for (indx = 0; (indx <lens)&&(indx+dis<lens); indx++)
   {
    if (arrs[indx] > arrs[indx + dis])
    {
      temp = arrs[indx];
      arrs[indx] = arrs[indx + dis];
      arrs[indx + dis] = temp;
    }else continue;
   }
   dis--;
 }
}
 
 
 
 
 

TAG:

 

评分:0

我来说两句

Open Toolbar