#include<iostream> #include<stdlib.h> using namespace std; //函數指針 void (*fp) (int a[],int n); //兩個數交換大小 void swap(int *a, int *b){ int x; x = *a; *a = *b; *b = x; } //冒泡排序實現代碼 void bubble_sort(int A[],int n){ int t; for(int i=0;i<n-1;i++) { for(int j=0;j<n-i-1;j++) //注意在內層循環中j的結束值是 n-i-1 { if(A[j+1]<A[j]) swap(A[j+1],A[j]); } } } //選擇排序實現代碼 void selection_sort(int a[],int n){ int temp,min; for(int i=0;i<n;i++) { min=i;//先假設最小下標為i for(int j=i+1;j<n;j++) if(a[j]<a[min]) min=j;//對i之後的數進行掃描將最小的數賦予min if(min!=i) swap(a[min],a[i]); } } //插入排序實現代碼 void insert_sort(int a[],int n){ int i,j,t; for ( i=1; i<n; i++) //i表示插入次數,共進行n-1次插入 { t=a[i]; //把待排序元素賦給t j=i-1; while ((j>=0)&& (t<a[j])) { a[j+1]=a[j]; j--; } // 順序比較和移動 a[j+1]=t; } } //希爾排序實現代碼 void insertion_sort(int data[], int n, int increment){ int i, j; for(i = increment; i < n; i += increment) for(j = i; j >= increment && data[j] < data[j - increment]; j -= increment) swap(&data[j], &data[j - increment]); } void shell_sort(int data[], int n){ int i, j; for(i = n / 2; i > 2; i /= 2) for(j = 0; j < i; j++) insertion_sort(data + j, n - j, i); insertion_sort(data, n, 1); } int main(){ const int n=10; int i; int a[n]={5,-2,8,7,6,14,0,-9,91,-32}; char key; cout<<"排序前:"<<endl; for(i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; cout<<"*******請輸入你想用什麼算法排序(0,退出)*********"<<endl; cout<<"*1、冒泡排序,2、選擇排序,3、插入排序,4、希爾排序*"<<endl; cin>>key; while(key!='0') { switch(key) { case '1':{fp=&bubble_sort;fp(a,n);break;} case '2': {fp=&selection_sort;fp(a,n);break;} case '3': {fp=&insert_sort;fp(a,n);break;} case '4': {fp=&shell_sort;fp(a,n);break;} default:break; } cout<<"排序後:"<<endl; for(i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; cout<<"請輸入你的選擇:\t"; cin>>key; } }
|