zoukankan      html  css  js  c++  java
  • 算法和数据结构排序插入排序

    直接插入排序

    int insertsort(int x[],int n)
    {
    	int i,j,t;
    	for(i=0;i<n;i++)
    	{
    		t=x[i];
    		for(j=i;j>=0&&x[j-1]>t;j--)
    		{
    			x[j]=x[j-1];
    		}
    		x[j]=t;
    	}
    }
    
     折半插入
    void BiInsertionSort(SqList &L){
       //对顺序表L作折半插入排序
       for(i=2; i<=L.length; ++i){
          L.r[0] = L.r[i];
          low = 1;
          high = i-1;
    
            //查找i记录应该插入的位置,必定是high+1的位置从而high+1位置以后的元素都应该往后移动一个位置,留出一个位置放入L.r[i]
          while(low <= high){
             mid = (low + high)/2;
             if(LT(L.r[0], L.r[m].key))
                high = m - 1;
             else
                low = m + 1;
          }
          //后移
          for(j=i-1; j>=high+1; --j)
             L.r[j+1] = L.r[j];
          //插入元素
          L.r[high+1] = L.r[0];
       }
    } 
    
    

     希尔排序

    void ShellSort(SqList *L)
     {
         int i,j;
         int increment=L->length;
         do
         {
             increment=increment/3+1;            /* 增量序列 */
             for(i=increment+1;i<=L->length;i++)
             {
                 if (L->r[i]<L->r[i-increment])    /* 需将L->r[i]插入有序增量子表 */ 
                 { 
                     L->r[0]=L->r[i];             /* 暂存在L->r[0] */
                     for(j=i-increment;j>0 && L->r[0]<L->r[j];j-=increment)
                         L->r[j+increment]=L->r[j]; /* 记录后移,查找插入位置 */
                     L->r[j+increment]=L->r[0]; /* 插入 */
                 }
             }
         }
         while(increment>1);
     }
    
  • 相关阅读:
    位置控制
    Scaleform结合C++编程
    使用定点缓存进行绘制
    纹理
    动态规划:背包问题
    希尔排序
    折半插入排序
    快速排序
    上楼梯算法
    归并排序
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2601845.html
Copyright © 2011-2022 走看看