#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; } }
|