内排序方法总结

  1 #include <bits/stdc++.h>
  2 
  3 using namespace std;
  4 
  5 typedef int ElementType;
  6 
  7 
  8 /*插入排序*/ /*时间复杂度O(N²)*/
  9 void InsertionSort ( ElementType *A, int N )
 10 {
 11     int j, P;
 12 
 13     ElementType Tmp;
 14     for( P=1; P<N; P++)
 15     {
 16         Tmp = A[P];
 17         for( j=P; j>0 && A[j-1]>Tmp; j-- )
 18             A[j] = A[j-1];
 19         A[j] = Tmp;
 20     }
 21 }
 22 
 23 
 24 
 25 /*希尔排序*/ ///特殊的插入排序
 26 void Shallsort ( ElementType *A, int N )
 27 {
 28     int i, j, Increment;
 29     ElementType Tmp;
 30 
 31     for( Increment=N/2; Increment>0; Increment/=2)
 32     {
 33         for( i=Increment; i<N; i++ )
 34         {
 35             Tmp = A[i];
 36             for( j=i; j>=Increment && Tmp < A[j - Increment]; j-=Increment )
 37                 A[j] = A[j - Increment];
 38             A[j] = Tmp;
 39         }
 40     }
 41 }
 42 
 43 
 44 /*堆排序*/
 45 #define LeftChild( i ) ( 2 * ( i ) + 1 )
 46 
 47 void PercDown ( ElementType *A, int i, int N )
 48 {
 49     int Child;
 50     ElementType Tmp;
 51 
 52     for( Tmp = A[i]; LeftChild(i) < N; i = Child )
 53     {
 54         Child = LeftChild(i);
 55         if( Child != N-1 && A[Child + 1] > A[Child] )
 56             Child++;
 57         if( Tmp < A[Child] )
 58             A[i] = A[Child];
 59         else break;
 60     }
 61     A[i] = Tmp;
 62 }
 63 void Heapsort( ElementType *A, int N )
 64 {
 65     int i;
 66     for( i = N/2; i >= 0; i-- )
 67         PercDown( A, i, N);
 68     for( i = N-1; i >= 0; i-- )
 69     {
 70         swap( A[0], A[i] );
 71         PercDown( A, 0, i );
 72     }
 73 
 74 }
 75 
 76 
 77 /*快速排序*/
 78 
 79 void qusort( int *a, int lt, int rt )
 80 {
 81     if(lt >= rt) return;
 82     int i = lt, j = rt, key = a[lt];
 83     while(i<j)
 84     {
 85         while(i<j && a[j] >= key)
 86             j--;
 87         a[i] = a[j];
 88         while(i<j && a[i] <= key)
 89             i++;
 90         a[j] = a[i];
 91     }
 92 
 93     a[i] = key;
 94     qusort( a, lt, i-1 );
 95     qusort( a, i+1, rt );
 96 }
 97 
 98 void qsort(void *base, size_t nmemb, size_t size, 
 99                              int (*compar)(const void*, const void*))
100           //目标数组,    项数,     sizeof(int), 函数指针
101 int mycomp ( const void *p1, const void *p2 )
102 {
103     /*使用指向int类型的指针访问值*/
104     const int *a1 = (const int *) p1;
105     const int *a2 = (const int *) p2;
106     if( *a1 < *a2 )            /*从小到大排序*/
107         return -1;
108     else if( *a1 == *a2 )
109         return 0;
110     else 
111         return 1;
112 }
113 
114 
115 
116 
117 /*归并排序*/
118 /* Lpos = start of left half, Rpos = start of right half */
119 void Merge ( ElementType *A, ElementType *TmpArray,
120                   int Lpos, int Rpos, int RightEnd )
121 {
122     int i, LeftEnd, NumElements, TmpPos;
123     
124     LeftEnd = Rpos - 1;
125     TmpPos  = Lpos;
126     NumElements = RightEnd - Lpos + 1;
127     
128     /* main loop */
129     while( Lpos <= LeftEnd && Rpos <= RightEnd )
130     {
131         if( A[Lpos] <= A[Rpos] )
132             TmpArray[TmpPos++] = A[Lpos++];  /* Copy rest of first  half */
133         else 
134             TmpArray[TmpPos++] = A[Rpos++];  /* Copy rest of second half */
135     }
136     while( Lpos <= LeftEnd  )
137         TmpArray[TmpPos++] = A[Lpos++];
138     while( Rpos <= RightEnd )
139         TmpArray[TmpPos++] = A[Rpos++];
140     
141     /* Copy TmpArray back */
142     for( i=0; i<NumElements; i++, RightEnd-- )
143         A[RightEnd] = TmpArray[RightEnd];
144 }
145 void Msort ( ElementType *A, ElementType *TmpArray,
146                                  int Left, int Rigth )
147 {
148     int Center;
149 
150     if( Left < Right )
151     {
152         Center = ( Left + Right ) / 2;
153         Msort( A, TmpArray, Left, Center );
154         Msort( A, TmpArray, Center+1, Right );
155         Merge( A, TmpArray, Left, Center+1; Right );
156     }
157 }
158 void Mergesort ( ElementType *A, int N )
159 {
160     ElementType *TmpArray;
161     
162     TmpArray = malloc( N * sizeof( ElementType ));
163     if( !TmpArray )
164     {
165         Msort( A, TmpArray, 0, N-1 );
166         free( TmpArray );
167     }
168     else
169     //   FatalError( "No space for tmp array!!!" );
170         return;
171 }
172 
173 
174 /*选择排序*/
175 //
176 /*桶排序*/
177 //
178 /*冒泡排序*/
179 //
180 
181 
182 int main()
183 {
184     cout << "Hello world!" << endl;
185     return 0;
186 }
187  

 

posted @ 2018-07-21 16:10  Gaojinman  阅读(236)  评论(0)    收藏  举报