Sort algorithm overview.
来源:互联网 发布:摄像头软件电脑版 编辑:程序博客网 时间:2024/06/05 19:19
A very good website for algorithm. http://www.softpanorama.org/Algorithms/sorting.shtml
* Techniques for sorting arrays .
* Bubble sort (double direction) | |
sort( r, lo, up ) ArrayToSort r; int lo, up; {int i, j; while (up>lo) { j = lo; for ( i=lo; i r[i+1].k ) { exchange( r, i, i+1 ); j = i;} up = j; for ( i=up; i>lo; i-- ) if ( r[i].k < r[i-1].k ) { exchange( r, i, i-1 ); j = i;} lo = j; } } |
Quicksort (with bounded stack usage) | |
sort( r, lo, up ) ArrayToSort r; int lo, up; {int i, j; ArrayEntry tempr; while ( up>lo ) { i = lo; j = up; tempr = r[lo]; /*** Split file in two ***/ while ( i tempr.k; j-- ); for ( r[i]=r[j]; i |
Heapsort | |
sort( r, lo, up ) ArrayToSort r; int lo, up; {int i; /*** construct heap ***/ for ( i=up/2; i>1; i-- ) siftup(r,i,up); /*** repeatedly extract maximum ***/ for ( i=up; i>1; i-- ) { siftup(r,1,i); exchange( r, 1, i ); } }; |
Linear insertion sort | |
sort( r, lo, up ) ArrayToSort r; int lo, up; {int i, j; ArrayEntry tempr; for ( i=up-1; i>=lo; i-- ) { tempr = r[i]; for ( j=i+1; j<=up && (tempr.k>r[j].k); j++ ) r[j-1] = r[j]; r[j-1] = tempr; } }; |
Shellsort | |
sort( r, lo, up ) ArrayToSort r; int lo, up; {int d, i, j; ArrayEntry tempr; for ( d=up-lo+1; d>1; ) { if (d<5) d = 1; else d = (5*d-1)/11; /*** Do linear insertion sort in steps size d ***/ for ( i=up-d; i>=lo; i-- ) { tempr = r[i]; for ( j=i+d; j<=up && (tempr.k>r[j].k); j+=d ) r[j-d] = r[j]; r[j-d] = tempr; } } } |
Interpolation (in-place) sort | |
sort( r, lo, up ) ArrayToSort r; int lo, up; {ArrayIndices iwk; ArrayEntry tempr; int i, j; for (i=lo; i<=up; i++) {iwk[i] = 0; r[i].k = -r[i].k;} iwk[lo] = lo-1; for (i=lo; i<=up; i++) iwk[ phi(-r[i].k,lo,up) ]++; for (i=lo; i=lo; i--) if ( r[i].k<0 ) do { r[i].k = -r[i].k; j = iwk[ phi( r[i].k, lo, up ) ]--; tempr = r[i]; r[i] = r[j]; r[j] = tempr; } while ( i != j ); for ( i=up-1; i>=lo; i-- ) { tempr = r[i]; for ( j=i+1; j<=up && (tempr.k>r[j].k); j++ ) r[j-1] = r[j]; r[j-1] = tempr; } }; |
Linear probing sort | |
sort( r, lo, up ) ArrayToSort r; int lo, up; {ArrayToSort r1; int i, j, uppr; uppr = up + (UppBoundr-up)*3/4; for (j=lo; j<=up; j++) r1[j] = r[j]; for (j=lo; j<=UppBoundr; j++) r[j].k = NoKey; for (j=lo; j<=up; j++) { for ( i=phi(r1[j].k,lo,uppr); r[i].k != NoKey; i++) { if ( r1[j].k < r[i].k ) { r1[j-1] = r[i]; r[i] = r1[j]; r1[j] = r1[j-1]; }; if ( i > UppBoundr ) Error; } r[i] = r1[j]; }; for (j=i=lo; j<=UppBoundr; j++) if ( r[j].k != NoKey ) r[i++] = r[j]; while ( i <= UppBoundr ) r[i++].k = NoKey; }; |