background image

5、 希尔排序法   【不稳定的】

/*
*

希尔排序,n为数组的个数

*/

void ShellSort( int arr[], int n )
{

int temp,pos;
int d = n;

//

增量初值

do{

d = d/3 + 1 ;
for(int i= d; i<n; i++ )
{

temp = arr[i];
pos = i-d;
while( pos>=0 && temp < arr[pos] ) {

//

实现增量为d的插入排序

arr[ pos + d ] = arr[pos];
pos -= d;

}
arr[ pos + d ] = temp;

}

} while( d > 1 );

}

三种高级排序算法

1、

快速排序

   辅助空间复杂度为 O1   【不稳定的】

void

 QuickSort( 

int

 *a,

int

 left, 

int

 right)

{

int

 i,j,middle,temp;

i = left;
j = right;
middle = a[ (left+right)/2 ];

do

{

while

( a[i]<middle && i<right ) 

//

从左扫描大于中值的数

i++;

while

( a[j]>middle && j>left ) 

//

从右扫描小于中值的数

j--;

if

( i<=j )  

//

找到了一对值