zoukankan      html  css  js  c++  java
  • 二分法排序

    二分法排序

    算法思想简单描述:
    在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们
    中间的那个元素比,如果小,则对前半再进行折半,否则对后半
    进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间
    的所有元素后移,再把第i个元素放在目标位置上。

    二分法没有排序,只有查找。所以当找到要插入的位置时。移动必须从最后一个记录开始,向后移动一位,再移动倒数第2位,直到要插入的位置的记录移后一位。
    二分插入排序是稳定的,平均时间O(n2)

    #include <iostream>
    using namespace std;
    
    void BinarySearch(int a[], int len)
    {
    	int i;
    	int first;
    	int last;
    	int iSave;
    	
    	for(i=1; i<len; i++)
    	{
    		first = 0;
    		last = i - 1;
    		iSave = a[i];
    		
    		while(first <= last)
    		{
    			if(a[i] >= a[(first + last)/2])
    			{
    				first = (first + last)/2 + 1;
    			}
    			else
    			{
    				last = (first + last)/2 - 1;
    			}
    		}
    		
    		for(int j=i-1; j>=first; j--)
    		{
    			/* 将排序码大于ki的记录后移 */
    			a[j+1] = a[j]; 
    		}
    		
    		a[first] = iSave;
    	}
    }
    
    void print(int A[], int len)
    {
    	int i=0;
    	for(i=0; i<len; i++)
    		cout << A[i] << " ";
    	cout<<endl;
    }
    
    int main()
    {
    	int A[15]={12,3,4,6,98,123,3,56,78,11,65,455,324,0,1};
    	int iS = sizeof(A)/sizeof(A[0]);
     	print(A, iS);
     	BinarySearch(A, iS);
     	print(A, iS);
    }
    

      

  • 相关阅读:
    Excel文件上传
    SAP 中如何寻找增强
    MySQL性能优化的最佳经验,随时补充
    PHP编程效率的20个要点
    php性能优化
    AngularJS API之$injector ---- 依赖注入
    AngularJS API之extend扩展对象
    AngularJS API之equal比较对象
    AngularJS API之isXXX()
    AngularJS API之toJson 对象转为JSON
  • 原文地址:https://www.cnblogs.com/eternal1025/p/5278896.html
Copyright © 2011-2022 走看看