c 排序 总结

插入排序:

#include < stdio.h >
#include
< sys / time.h >
#include
< unistd.h >
#include
< stdlib.h >


void
change_node (
int data[], int head, int start, int end )
{
int j = 0 ;
for (j = end; j > start; j -- )
{
data[j]
= data[j - 1 ];
}
data[start]
= head;
return ;
}
/* ----- end of function change_node ----- */

void
insert_data (
int data[], int num)
{
int i = 0 ;
for (i = num - 1 ; i >= 0 ; i -- )
{
if ((data[num] > data[i]))
{
if (i == num - 1 )
{
break ;
}
change_node(data, data[num], i
+ 1 , num);
break ;
}
else
{
if (i == 0 )
{
change_node(data, data[num],
0 , num);
}
}
}
return ;
}
/* ----- end of function insert_data ----- */

void
sort (
int data[], int nums)
{
int i = 1 ;
for (i = 1 ; i < nums ; i ++ )
{
insert_data(data, i);
}
return ;
}
/* ----- end of function sort ----- */

int
main()
{
int lens = 100000 ;
int a[ 100000 ];
int i = 0 ;
for (i = 0 ; i < lens; i ++ )
{
a[i]
= rand();
}
struct timeval tv1, tv2;
double sec = 0 ;
gettimeofday(
& tv1, 0 );

sort(a,lens);

gettimeofday(
& tv2, 0 );
sec
= ( double )(tv2.tv_sec - tv1.tv_sec) + ( double )(tv2.tv_usec - tv1.tv_usec) / 1000000 ;
printf(
" time1: %f\n " , sec);

return 0 ;
}

时间性能:

 

time1: 23.330364

 

快速排序:

 

#include < stdio.h >
#include
< sys / time.h >
#include
< unistd.h >
#include
< stdlib.h >

void swap( int * a, int * b)
{
int temp;
temp
=* a;
* a =* b;
* b = temp;
}

int qSort_pos( int a[], int low, int high)
{
int temp = a[low],i = low,j = high;
while (i < j)
{
while ((a[j] >= temp) && (i < j)) j -- ;
if (i < j) {swap( & a[i], & a[j]);i ++ ;}
while ((a[i] <= temp) && (i < j)) i ++ ;
if (i < j) {swap( & a[i], & a[j]);j -- ;}
}
return i;
}


void qSort( int a[], int low, int high)
{
int pos;
if (low < high)
{
pos
= qSort_pos(a,low,high);
qSort(a,low,pos
- 1 );
qSort(a,pos
+ 1 ,high);
}
}

void quicksort( int l[], int n)
{
qSort(l,
0 ,n - 1 ); // 第一个作为枢轴 ,从第一个排到第n个
}

int
main()
{
int lens = 100000 ;
int a[ 100000 ];
int i = 0 ;
for (i = 0 ; i < lens; i ++ )
{
a[i]
= rand();
}


for (i = 0 ; i < 10 ; i ++ )
{
printf(
" %d\n " ,a[i]);
}
struct timeval tv1, tv2;
double sec =0;
gettimeofday(
&tv1, 0); 

quicksort(a,lens);

gettimeofday(&tv2, 0);
sec 
= (double)(tv2.tv_sec - tv1.tv_sec) + (double)(tv2.tv_usec - tv1.tv_usec) /1000000;
printf(
"time1: %f\n", sec);
printf(
" \n\n " );

for (i = 0 ; i < 10 ; i ++ )
{
printf(
" %d\n " ,a[i]);
}



return 0 ;
}

 

时间性能:

time1: 0.051894

 

指针

#include < stdio.h >
#include
< sys / time.h >
#include
< unistd.h >
#include
< stdlib.h >

void swap( int * a, int * b)
{
int temp;
temp
=* a;
* a =* b;
* b = temp;
}

int qSort_pos( int * a[], int low, int high)
{
int temp =* a[low],i = low,j = high;
while (i < j)
{
while (( * a[j] >= temp) && (i < j)) j -- ;
if (i < j) {swap(a[i],a[j]);i ++ ;}
while (( * a[i] <= temp) && (i < j)) i ++ ;
if (i < j) {swap(a[i],a[j]);j -- ;}
}
return i;
}

void qSort( int * a[], int low, int high)
{
int pos;
if (low < high)
{
pos
= qSort_pos(a,low,high);
qSort(a,low,pos
- 1 );
qSort(a,pos
+ 1 ,high);
}
}

void quicksort( int * l[], int n)
{
qSort(l,
0 ,n - 1 ); // 第一个作为枢轴 ,从第一个排到第n个
}

int
main()
{
int lens = 100 ;
int * a[ 100 ];
int i = 0 ;
for (i = 0 ; i < lens; i ++ )
{
a[i]
= ( int * )malloc( sizeof ( int ));
* a[i] = rand();
}

quicksort(a,lens);


return 0 ;
}

你可能感兴趣的:(排序)