快速排序 选择排序 冒泡排序 二分插入排序时间性能
来源:互联网 发布:ipadmini2网络差 编辑:程序博客网 时间:2024/06/05 18:13
#include<iostream>#include <algorithm>#include <windows.h>#include <time.h>#include <cstdio>#include <cstdlib>using namespace std;#define maxsize 10000typedef int element;typedef struct //定义顺序表的基本结构{ element *elem;//数据 int length, listsize;} Sqlist;void initList(Sqlist &L, int n) //初始化顺序表{ if(n > maxsize) cout<<"超出最大的容量"<<endl; L.elem = new int[n]; L.length = n; L.listsize = maxsize;}void input(Sqlist &L) //输入顺序表的每一个元素{ for(int i = 0; i < L.length; i++) cin>>L.elem[i];}void select_sort(Sqlist &L) //选择排序{ int temp, k; for(int i = 0; i < L.length-1; i++) { k = i; for(int j = i+1; j < L.length; j++) { if(L.elem[k] > L.elem[j]) k = j; } if(k != i) { temp = L.elem[k]; L.elem[k] = L.elem[i]; L.elem[i] = temp; } }}void maopao_sort(Sqlist &L) //冒泡排序{ int temp; for(int i = 0; i < L.length-1; i++) { for(int j = 0; j < L.length-i-1; j++) { if(L.elem[j] > L.elem[j+1]) { temp = L.elem[j]; L.elem[j] = L.elem[j+1]; L.elem[j+1] = temp; } } }}void quick_sort(Sqlist &L, int left, int right) //快速排序{ int i,j,temp; i = left; j = right; temp = L.elem[left]; if(left > right) return; while(i!=j)/*找到最终位置*/ { while(L.elem[j] >= temp && j>i) j--; if(j>i) L.elem[i++] = L.elem[j]; while(L.elem[i] <= temp && j>i) i++; if(j>i) L.elem[j--] = L.elem[i]; } L.elem[i]=temp; quick_sort(L,left,i-1);/*递归左边*/ quick_sort(L,i+1,right);/*递归右边*/}void binsert_sort(Sqlist &L) //二分插入排序{ int j; for(int i= 1; i<L.length; i++) { int low=0,high=i; if(L.elem[i] < L.elem[i-1]) //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入 { int x = L.elem[i]; //复制为哨兵,即存储待排序元素 L.elem[i] = L.elem[i-1]; //先后移一个元素 (因为a[i]就是X,所以不怕丢失) while(low<=high) //查找在有序表的插入位置 (遍历表) { int m=(low+high)/2; if(x < L.elem[m]) high=m-1; else low=m+1; } for(j=i-1; j>=high+1; j--) L.elem[j+1]=L.elem[j]; L.elem[j+1] = x; //插入到正确位置 } }}void show(Sqlist &L){ int i; for(i = 0; i < L.length-1; i++) cout<<L.elem[i]<<" "; cout<<L.elem[i]<<endl;}int main(){ string order; cout<<"输入数组容量"<<endl; int n; cin>>n; Sqlist L; initList(L, n); clock_t start, finish; double runtime; for(int i = 0; i < 4; i++) { cout<<"---输入每一个数组元素---"<<endl; input(L); cout<<"选择排序方式或是操作指令"<<endl; cout<<"quick_sort: 快速排序"<<endl; cout<<"select_sort: 选择排序"<<endl; cout<<"maopao_sort: 冒泡排序"<<endl; cout<<"binsert_sort: 二分插入排序"<<endl; cout<<"show: 显示当前数组"<<endl; cout<<"quit : 退出对当前数组的操作"<<endl; while(1) { cin>>order; if(order == "quick_sort") { start = clock(); for(int k = 0; k < 100000; k++) quick_sort(L, 0, L.length-1); finish = clock(); runtime = (double)(finish-start); printf("快速排序完成此排序所用的时间为%lf毫秒\n", runtime); cout<<"排序后的数组为"<<endl; show(L); } else if(order == "select_sort") { start = clock(); for(int k = 0; k < 100000; k++) select_sort(L); finish = clock(); runtime = (double)(finish-start); printf("选择排序完成此排序所用的时间为%lf毫秒\n", runtime); cout<<"排序后的数组为"<<endl; show(L); } else if(order == "maopao_sort") { start = clock(); for(int k = 0; k < 100000; k++) maopao_sort(L); finish = clock(); runtime = (double)(finish-start); printf("冒泡排序完成此排序所用的时间为%lf毫秒\n", runtime); cout<<"排序后的数组为"<<endl; show(L); } else if(order == "binsert_sort") { start = clock(); for(int k = 0; k < 100000; k++) binsert_sort(L); finish = clock(); runtime = (double)(finish-start); printf("二分插入排序完成此排序所用的时间为%lf毫秒\n", runtime); cout<<"排序后的数组为"<<endl; show(L); } else if(order == "show") { show(L); } else if(order == "quit") { cout<<"***已退出,请输入下一个数组***"<<endl; break; } else cout<<"输入的操作指令有误,请检查后重新输入"<<endl; } } return 0;}
阅读全文
0 0
- 快速排序 选择排序 冒泡排序 二分插入排序时间性能
- 冒泡排序、选择排序、插入排序、快速排序算法的时间性能分析(java实现)
- 插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序
- 插入,冒泡,选择,快速排序,二分查找
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 冒泡排序 快速排序 插入排序 堆排序 选择排序
- 插入排序、选择排序、冒泡排序、快速排序、堆排序
- 数组排序:快速排序,选择排序,冒泡排序,插入排序
- Java 排序 快速排序 冒泡排序 选择排序 插入排序
- 选择排序,冒泡排序,二分搜索,插入排序,归并排序
- 冒泡排序,选择排序,直接插入排序,二分查找排序
- 冒泡排序,选择排序,插入排序,快速排序(PHP)
- 选择排序&插入排序&冒泡排序&快速排序算法实现
- 插入排序,冒泡排序,选择排序,快速排序
- 插入排序 选择排序 冒泡排序 快速排序
- 冒泡排序、插入排序、快速排序、选择排序
- 冒泡排序-插入排序-快速排序-选择排序---飞天博客
- java实现冒泡排序,插入排序,选择排序,快速排序
- JVM 自带线程
- 「重要」重新开更
- 2017/11/21
- 【语义分割】图像语义分割技术入门
- Rest
- 快速排序 选择排序 冒泡排序 二分插入排序时间性能
- ubuntu 16.04 安装 tensorflow (cpu)
- STM32 软件按键消抖
- noip2017 treasure(状压dp)
- oracle中数据库(user)重命名
- 发送HTML信息
- E
- Python socket 通信,同一台电脑可以正常访问而另一台电脑无法访问问题
- 软件工程第十章面向对象分析