各种排序算法的比较
2016-05-24 11:35
387 查看
一.实验目的
实现常用的排序算法,加深对这些算法的理解,以后可以将这些算法应用到实际问题的解决上。
二.实验题目
1.排序是在实际问题中经常用到的算法,快速、选择和插入三种排序算法是排序算法中最简单的也是最常用到的,实现这三种算法。
2.在不同的数值序列上运行,然后比较三种方法的空间
复杂度和时间复杂度,分析比较结果,得出选择这三种排序算法的一般原则。
实现常用的排序算法,加深对这些算法的理解,以后可以将这些算法应用到实际问题的解决上。
二.实验题目
1.排序是在实际问题中经常用到的算法,快速、选择和插入三种排序算法是排序算法中最简单的也是最常用到的,实现这三种算法。
2.在不同的数值序列上运行,然后比较三种方法的空间
#include "iostream" #include "cstdlib" #include "ctime" using namespace std; int count=0; void init_array(int* array); void traverse(int* array); void xuan_ze(int* array); void insert_sort(int* array); int partition(int* array,int low,int high); void fast_sort(int* array,int low,int high); void fast_sort(int* array); int main(){ int array[100]={0}; init_array(array); traverse(array); xuan_ze(array); traverse(array); insert_sort(array); traverse(array); fast_sort(array); traverse(array); cout<<count<<endl; return 0; } void init_array(int* array){ srand((int)time(0)); for(int i=1;i<=10;i++){//array[0]作为监视哨 array[i]=rand(); count++; } } void traverse(int* array){ for(int i=1;i<=count;i++){ cout<<array[i]<<"\t"; } cout<<endl; } //选择排序 void xuan_ze(int* array){ for(int i=1;i<count;i++){ for(int j=i+1;j<=count;j++){ if(array[i]>array[j]){ int temp=array[i]; array[i]=array[j]; array[j]=temp; } } } } //插入排序,核心思想是将一个数据插入有序数组中,使有序数组变成,最终达到排序目的 void insert_sort(int* array){ for(int i=1;i<=count;i++){ array[0]=array[i]; int num=array[i]; int k=i;\ while(num<array[k]){ array[k+1]=array[k]; k--; } array[k]=num; } } int partition(int* array,int low,int high){ int number=array[low]; while(low<high){ while(low<high&&array[high]>=number){ high--; } int temp=array[low]; array[low]=array[high]; array[high]=temp; while(low<high&&array[low]<=number){ low++; } temp=array[low]; array[low]=array[high]; array[high]=temp; } return low; } void fast_sort(int* array,int low,int high){ if(low<high){ int position=partition(array,low,high); fast_sort(array,low,position-1); fast_sort(array,position+1,high); } } void fast_sort(int* array){ fast_sort(array,1,count); }
复杂度和时间复杂度,分析比较结果,得出选择这三种排序算法的一般原则。
相关文章推荐
- HDU 3400 Line belt(嵌套三分)
- DiskLruCache使用指南
- 深入理解 Java 垃圾回收机制
- C++中的析构函数
- php上传文件及头像预览
- JavaScript概览(一)--基本语法
- Linux命令大全
- json与泛型互转和json与datatable互转
- hdu2535:Vote
- Openstack liberty源码分析 之 云主机的启动过程1
- Codeforces Round #340 (Div. 2) E 莫队算法
- MySQL数据库表操作的经典语句
- 二叉树的遍历
- android 在非UI线程更新UI仍然成功原因深入剖析
- PHP实现同一个帐号不允许多人同时重复登陆
- css的核心内容 标准流、盒子模型、浮动、定位等分析
- MVP in Android,让Activity更优雅一点。
- unity3d 新UI系统UGUI点击与3D场景点击分离
- asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析
- android 字符串操作