参考文献:Data Structures and Algorithm Analysis Weiss 2rd Edition
快速排序:
#include <stdio.h> #include <iostream.h> #include <string.h> #include<stdlib.h> #include<assert.h> #include <algorithm> #include <vector> using namespace std; //字符串拷贝函数 char* Strcpy(char* des,const char* src) { assert((des!=NULL)&&(src!=NULL)); char* temp = des; while((*des++=*src++)!='\0'){} return temp; } //快速排序算法 #define CUTOFF (4) void InsertionSort(int a[],int N) { int j,P; int temp; for(P=1;P<N;P++){ temp = a[P]; for(j=P;j>0 && a[j-1]>temp;j--){ a[j] = a[j-1]; } a[j]=temp; } } int Median(int a[],int Left,int Right) { int Center = (Left+Right)/2; if(a[Left] > a[Center]) swap(a[Left],a[Center]); if(a[Left] > a[Right]) swap(a[Left],a[Right]); if(a[Center] > a[Right]) return a[Right]; else{ swap(a[Center],a[Right]); return a[Right]; } } void QSort(int a[],int Left,int Right) { if(Left+CUTOFF<=Right){ int Pivot = Median(a,Left,Right); int i = Left,j=Right-1; for(;;){ while(a[i++]<Pivot){} while(a[j--]>Pivot){} if(--i < ++j) swap(a[i],a[j]); else break; } swap(a[i],a[Right]); QSort(a,Left,i-1); QSort(a,i+1,Right); } else InsertionSort(a+Left,Right-Left+1); } void QuickSort(int a[],int N) { QSort(a,0,N-1); } void main(void) { int A[] = {9,-345,3234,9,-23,54,49,12,23,-35,932,987,23455}; QuickSort(A,13); for(int i= 0; i<13; i++){ printf("%d ",A[i]); } printf("\n"); }
#include <stdio.h>
#include <iostream.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <algorithm> #include <vector> using namespace std; //快速排序算法 #define CUTOFF (4) void InsertionSort(int a[],int N) //插入排序 { int j,P; int temp; for(P=1;P<N;P++){ temp = a[P]; for(j=P;j>0 && a[j-1]>temp;j--){ a[j] = a[j-1]; } a[j]=temp; } } int Median(int a[],int Left,int Right) { int Center = (Left+Right)/2; if(a[Left] > a[Center]) swap(a[Left],a[Center]); if(a[Left] > a[Right]) swap(a[Left],a[Right]); if(a[Center] > a[Right]) return a[Right]; else{ swap(a[Center],a[Right]); return a[Right]; } } void QSort(int a[],int Left,int Right) { if(Left+CUTOFF<=Right){ int Pivot = Median(a,Left,Right); int i = Left,j=Right-1; for(;;){ while(a[i++]<Pivot){} while(a[j--]>Pivot){} if(--i < ++j) swap(a[i],a[j]); else break; } swap(a[i],a[Right]); QSort(a,Left,i-1); QSort(a,i+1,Right); } else InsertionSort(a+Left,Right-Left+1); } void QuickSort(int a[],int N) { QSort(a,0,N-1); } void main(void) { int A[] = {9,-345,3234,9,-23,54,49,12,23,-35,932,987,23455}; QuickSort(A,13); for(int i= 0; i<13; i++){ printf("%d ",A[i]); } printf("\n"); }
#include <stdio.h>
#include <iostream.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <algorithm> #include <vector> using namespace std; //快速排序算法 #define CUTOFF (4) void InsertionSort(int a[],int N) //插入排序 { int j,P; int temp; for(P=1;P<N;P++){ temp = a[P]; for(j=P;j>0 && a[j-1]>temp;j--){ a[j] = a[j-1]; } a[j]=temp; } } int Median(int a[],int Left,int Right) { int Center = (Left+Right)/2; if(a[Left] > a[Center]) swap(a[Left],a[Center]); if(a[Left] > a[Right]) swap(a[Left],a[Right]); if(a[Center] > a[Right]) return a[Right]; else{ swap(a[Center],a[Right]); return a[Right]; } } void QSort(int a[],int Left,int Right) { if(Left+CUTOFF<=Right){ int Pivot = Median(a,Left,Right); int i = Left,j=Right-1; for(;;){ while(a[i++]<Pivot){} while(a[j--]>Pivot){} if(--i < ++j) swap(a[i],a[j]); else break; } swap(a[i],a[Right]); QSort(a,Left,i-1); QSort(a,i+1,Right); } else InsertionSort(a+Left,Right-Left+1); } void QuickSort(int a[],int N) { QSort(a,0,N-1); } void main(void) { int A[] = {9,-345,3234,9,-23,54,49,12,23,-35,932,987,23455}; QuickSort(A,13); for(int i= 0; i<13; i++){ printf("%d ",A[i]); } printf("\n"); }
#include <stdio.h>
#include <iostream.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <algorithm> #include <vector> using namespace std; //快速排序算法 #define CUTOFF (4) void InsertionSort(int a[],int N) //插入排序 { int j,P; int temp; for(P=1;P<N;P++){ temp = a[P]; for(j=P;j>0 && a[j-1]>temp;j--){ a[j] = a[j-1]; } a[j]=temp; } } int Median(int a[],int Left,int Right) { int Center = (Left+Right)/2; if(a[Left] > a[Center]) swap(a[Left],a[Center]); if(a[Left] > a[Right]) swap(a[Left],a[Right]); if(a[Center] > a[Right]) return a[Right]; else{ swap(a[Center],a[Right]); return a[Right]; } } void QSort(int a[],int Left,int Right) { if(Left+CUTOFF<=Right){ int Pivot = Median(a,Left,Right); int i = Left,j=Right-1; for(;;){ while(a[i++]<Pivot){} while(a[j--]>Pivot){} if(--i < ++j) swap(a[i],a[j]); else break; } swap(a[i],a[Right]); QSort(a,Left,i-1); QSort(a,i+1,Right); } else InsertionSort(a+Left,Right-Left+1); } void QuickSort(int a[],int N) { QSort(a,0,N-1); } void main(void) { int A[] = {9,-345,3234,9,-23,54,49,12,23,-35,932,987,23455}; QuickSort(A,13); for(int i= 0; i<13; i++){ printf("%d ",A[i]); } printf("\n"); }
#include <stdio.h>
#include <iostream.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <algorithm> #include <vector> using namespace std; //快速排序算法 #define CUTOFF (4) void InsertionSort(int a[],int N) //插入排序 { int j,P; int temp; for(P=1;P<N;P++){ temp = a[P]; for(j=P;j>0 && a[j-1]>temp;j--){ a[j] = a[j-1]; } a[j]=temp; } } int Median(int a[],int Left,int Right) { int Center = (Left+Right)/2; if(a[Left] > a[Center]) swap(a[Left],a[Center]); if(a[Left] > a[Right]) swap(a[Left],a[Right]); if(a[Center] > a[Right]) return a[Right]; else{ swap(a[Center],a[Right]); return a[Right]; } } void QSort(int a[],int Left,int Right) { if(Left+CUTOFF<=Right){ int Pivot = Median(a,Left,Right); int i = Left,j=Right-1; for(;;){ while(a[i++]<Pivot){} while(a[j--]>Pivot){} if(--i < ++j) swap(a[i],a[j]); else break; } swap(a[i],a[Right]); QSort(a,Left,i-1); QSort(a,i+1,Right); } else InsertionSort(a+Left,Right-Left+1); } void QuickSort(int a[],int N) { QSort(a,0,N-1); } void main(void) { int A[] = {9,-345,3234,9,-23,54,49,12,23,-35,932,987,23455}; QuickSort(A,13); for(int i= 0; i<13; i++){ printf("%d ",A[i]); } printf("\n"); }