2.3-6 Insertion Sort with Binary Search

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

<< Introduction to algorithms >> ( Second Edition )

2.3-6 Insertion Sort with Binary Search

Observe that the while loop of line 5-7 of the Insertion Sort precedure in

Section 2.1 uses a linear search to scan ( backward ) through the sorted subarray

A[ 1 .. j - 1 ]. Can we use a binary search ( see Exercise 2.3-5 ) instead to improve

the overall worst-case running time of insertion sort to O( nlgn ) ?

Solution:

// 声明:本代码旨在实现原文的思想

// copyleft 2004 http://blog.csdn.net/mskia

// email: bitrain@hotmail.com

#ifndef Insertion_Sort_with_Binary_Search_by_mskia

#define Insertion_Sort_with_Binary_Search_by_mskia

namespace cc {

template< class T >

void insertion_sort_with_binary_search( T *first , T *last ) {

for ( T *i = first + 1; i <= last; ++i ) {

T *left = first , *right = i - 1;

while ( left <= right ) {

T *mid = left + ( ( right - left ) >> 1 );

if ( *i < *mid ) {

if ( *( mid - 1 ) < *i ) {

T bac = *i;

for ( T *p = i; p > mid; --p ) {

*p = *( p - 1 );

}

*mid = bac;

break;

} else {

right = mid - 1;

}

} else {

if ( *( mid + 1 ) > *i ) {

++mid;

T bac = *i;

for ( T *p = i; p > mid; --p ) {

*p = *( p - 1 );

}

*mid = bac;

break;

} else {

left = mid + 1;

}

}

}

}

return;

}

}

#endif

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航