把待排序的数据分为若干组,对同一组内的数据用直接插入排序;
单链表的逆置就是用的冒泡排序。
#include <stdio.h>
void bubble_sort( int a[], int n )
{
int i , j;
//标记flag,用于标记本次交换排序过程是否有交换动作。若本次没有交换动作,可以提前结束。
int temp , flag = 1;
for( i =1; i < n && flag ; i++ )
{
flag = 0;
for( j = 0; j < n - i; ++j )
{
if( a[j] > a[j + 1] )
{
flag = 1;
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
void shell_sort( int a[], int n, int d[], int numofd )
{
int m, span;
int k, i ,j;
int temp;
for( m = 0; m < numofd; m++ )
{
span = d[m];
for( k = 0; k< span; ++k )
{
for( i = k; i < n - span; i += span )
{
temp = a[ i + span ];
j = i;
while( j > -1 && temp < a[j] )
{
a[j + span] = a[j];
j = j - span;
}
a[ j + span] = temp;
}
}
}
}
void main()
{
int k , n;
int d[] = { 6, 3,1 };
int a[] = { 9,6,4,3,66,23,10 };
n = sizeof( a ) / sizeof( int );
//bubble_sort( a, n);
shell_sort( a, n ,d ,3);
for( k = 0; k< n; k++ )
printf( "%d ", a[k] );
}