常见排序方法(冒泡排序、选择排序、插入排序、希尔排序和快速排序)

来源:互联网 发布:孤岛危机3优化怎么样 编辑:程序博客网 时间:2024/05/17 03:24


程序:

#include <iostream>#include <string>#include <windows.h>using namespace std;int main(){void bubblesort(int*,int);void directinsert(int*,int);void secletsort(int*,int);void quicksort(int*,int,int);void shellsort(int*,int,int*,int);int a[10] = {0,8,6,4,2,1,3,5,7,9};int incrmnts[3] = {1,3,5};cout << "the initial array is: ";for(int i=0;i<10;i++){cout << a[i] << " ";}cout << endl;//bubblesort(a,10);//directinsert(a,10);//secletsort(a,10);quicksort(a,0,9);//shellsort(a,10,incrmnts,3);cout << "the sorted array is: ";for(int i=0;i<10;i++){cout << a[i] << " ";}system("pause");//按任意键继续...return 0;}//冒泡排序void bubblesort(int* a,int N){for(int i=1;i<N;i++){for(int j=0;j<N-i;j++){if(a[j]>a[j+1]){int temp = a[j+1];a[j+1] = a[j];a[j] = temp;}}}}//直接插入排序void directinsert(int* a,int N){int i,inserta,j;if(N<=1) return;for(i=0;i<N-1;i++){inserta = a[i+1];j=i;while(a[j]>inserta && j>=0){a[j+1] = a[j];j--;}a[j+1] = inserta;}}//选择排序void secletsort(int* a,int N){int i,j,k,min;for(i=0;i<N-1;i++){min = a[i],k=i;for(j=i+1;j<N;j++){if(a[j]<min)    {min = a[j];k = j;}}int temp = a[i];a[i] = min;a[k] = temp;}}//快速排序void quicksort(int* a,int lowerbound,int upperbound){if(lowerbound>=upperbound) return;//以下为分左右两组程序int mid;int low = lowerbound;int up = upperbound;int target = a[lowerbound];while(low<up){while((a[low]<=target)&&(low<upperbound))low++;while((a[up]>target)&&(up>lowerbound))up--;if(low<up){int temp = a[low];a[low] = a[up];a[up] = temp;}}a[lowerbound] = a[up];a[up] = target;mid = up;//以上为分左右两组程序quicksort(a,lowerbound,mid-1);quicksort(a,mid+1,upperbound);}//Shell排序void shellsort(int* a,int N,int* stepset,int stepsetnum){int step,i,j,k,inserta;for(k=stepsetnum-1;k>=0;k--){step = stepset[k];for(i=step;i<N;i++){inserta = a[i];j = i-step;while(j>=0 && a[j]>inserta){a[j+step] = a[j];j -= step;}a[j+step] = inserta;}}}


0 0