• 折半插入排序法---排序算法(二)



    1.排序原理

    折半插入排序法是对直接插入排序法的改进,直接插入排序法(http://blog.csdn.net/whzhaochao/article/details/12953741),是在前面已排好序的序列中顺序查找要插入的位置,折半插入排序法则是用二查找法找到要插入的位置,然后插入。

    2.代码

    #include <stdio.h>
    
    void printArray(int a[],int size){  
        printf("数组为:[%d] ",a[0]);  
        for (int i=1;i<size;i++)  
        {  
            printf(" %d ",a[i]);  
        }  
        printf("
    ");  
    }
    
    void main()
    {
    	//a[0]为监视哨  
        int a[8]={0,38,65,97,76,13,27,49};  
    
        for (int i=2;i<=7;i++)  
        {  
            printf(" i=%d  ",i);  
            printArray(a,8);  
    //将要插入的数放监视哨
    		a[0]=a[i];
    		int low=1,high=i-1;
    //while循环用二分查找法找到要插入的位置为 high+1
    		while(low<=high){
    			int m=(low+high)/2;
    			if (a[0]<a[m])
    			{
    				high=m-1;
    			}else{
    				low=m+1;
    			}
    		}
    
    		printf("
    %d要插入%d位置",a[0],a[high+1]);
    		if (i-1>=high+1)
    		{
    			printf("
    %d到%d,要向前移一位
    ",a[high+1],a[i-1]);
    		}
    	
    //将 high+1到i-1位置数据移到 high+2到i位置		
    		for (int j=i-1;j>=high+1;--j)
    		{
    			a[j+1]=a[j];
    		}
    // high+1插入要插入的数据
    		a[high+1]=a[0];
    
        }  
        printf("结果 ");  
        printArray(a,8);  
    
    }
    
    
    



    3结果

     i=2  数组为:[0]  38  65  97  76  13  27  49
    
    65要插入65位置 i=3  数组为:[65]  38  65  97  76  13  27  49
    
    97要插入97位置 i=4  数组为:[97]  38  65  97  76  13  27  49
    
    76要插入97位置
    97到97,要向前移一位
     i=5  数组为:[76]  38  65  76  97  13  27  49
    
    13要插入38位置
    38到97,要向前移一位
     i=6  数组为:[13]  13  38  65  76  97  27  49
    
    27要插入38位置
    38到97,要向前移一位
     i=7  数组为:[27]  13  27  38  65  76  97  49
    
    49要插入65位置
    65到97,要向前移一位
    结果 数组为:[49]  13  27  38  49  65  76  97
    
    


  • 相关阅读:
    扩展Dijkstra
    CodeForces 1396E. Distance Matching
    大联盟2
    整式乘除法
    美国数学会众多教授推荐的本科&研究生代数几何经典书籍教材清单
    算法题——立方体的体对角线穿过多少个正方体?
    导数练习题
    导数压轴题
    集合
    著名数学家Ky Fan的故事
  • 原文地址:https://www.cnblogs.com/whzhaochao/p/5023476.html
Copyright © 2020-2023  润新知