直接插入排序和快速排序函数
具体实现
#include <stdio.h>
typedef struct {
int a[ 6 ] ;
int length;
} list, * sqlist;
void insertsort ( sqlist& l) ;
int partition ( sqlist& l, int low, int high) ;
void qsort ( sqlist& l, int low, int high) ;
void insertsort ( sqlist& l) {
int i, j;
for ( i = 2 ; i <= l-> length; ++ i)
if ( l-> a[ i] < l-> a[ i - 1 ] ) {
l-> a[ 0 ] = l-> a[ i] ;
l-> a[ i] = l-> a[ i - 1 ] ;
for ( j = i - 2 ; l-> a[ 0 ] < l-> a[ j] ; -- j)
l-> a[ j + 1 ] = l-> a[ j] ;
l-> a[ j + 1 ] = l-> a[ 0 ] ;
}
}
int partition ( sqlist& l, int low, int high) {
int pivotkey;
l-> a[ 0 ] = l-> a[ low] ;
pivotkey = l-> a[ low] ;
while ( low < high) {
while ( low < high && l-> a[ high] >= pivotkey)
-- high;
l-> a[ low] = l-> a[ high] ;
while ( low < high && l-> a[ low] <= pivotkey)
++ low;
l-> a[ high] = l-> a[ low] ;
}
l-> a[ low] = l-> a[ 0 ] ;
return low;
}
void qsort ( sqlist& l, int low, int high) {
int pivotloc;
if ( low < high) {
pivotloc = partition ( l, low, high) ;
qsort ( l, low, pivotloc - 1 ) ;
qsort ( l, pivotloc + 1 , high) ;
}
}
int main ( ) {
list l;
l. length = 5 ;
int i;
l. a[ 1 ] = 2 ;
l. a[ 2 ] = 6 ;
l. a[ 3 ] = 1 ;
l. a[ 4 ] = 7 ;
l. a[ 5 ] = 3 ;
sqlist s = & l;
qsort ( s, 1 , 5 ) ;
for ( i = 1 ; i < 6 ; i++ ) {
printf ( "%d\n" , s-> a[ i] ) ;
}
return 0 ;
}