资源简介
五种内部排序算法性能比较, 1.直接插入排序算法。 2.简单选择排序。 3.希尔排序。 4.归并排序。5.快速排序。分别对交换次数,比较次数,移动次数,时长,时间复杂度进行性能比较。给出十万到百万级数据量的统计结果。以c语言控制台画出的表格形式呈现。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
using namespace std;
const int Max=1000005;
int arr[Max]= {0}b[Max];
long long int bijiao[5]= {0}jiaohuan[5]= {0}yidong[5]= {0};
typedef struct {
long long int num;
long long int time;
int mingci;
} time1;
int cmp(const time1 &aconst time1 &b) {
return a.time }
int cmp1(const time1 &aconst time1 &b) {
return a.num }
void init(int num) {
int i;
if(num>=Max) {
cout<<“输入数字太大!!!结束程序“< exit(2);
}
srand((unsigned) time(NULL));
for(i=0; i b[i]=arr[i]=rand()%10000;
}
return;
}
void huanyuan(int num) {
int i;
for(i=0; i arr[i]=b[i];
}
}
void insertSort(int R[]int n) { // 待排数据存在R[]中默认为整型个数为n
int i j temp;
for(i=2; i<=n; i++) { /* 数组从下标1开始存储第一个元素有序所以从第二个元素开始处理 */
if(R[i] bijiao[0]++;
yidong[0]++;
temp=R[i]; // 将待插入元素暂时存于temp中
j=i-1;
while(temp=1) { // 下面的循环完成寻找插入位置的功能
bijiao[0]++;
yidong[0]++;
R[j+1]=R[j] ;
jiaohuan[0]++;
j--;
}
}
R[j+1]=temp;
// 找到插入位置后将temp中暂存的待插入元素插入
}
}
void shellSort(int arr[] int len) {
int h = 0i = 0 j = 0temp; //设置步长
for(h = 1; h < len; h = 3 * h + 1) yidong[1]++;
while(h) {
h /= 3;
yidong[1]+=h/3;
if(h < 1) break;
for(i = h; i < len; i++) for(j = i; j >= h; j-=h) {
if(arr[j-h] < arr[j]) break;
bijiao[1]+=h/3;
jiaohuan[1]+=h/3;
yidong[1]+=h/3;
temp = arr[j-h];
arr[j-h] = arr[j];
arr[j]= temp;
}
}
}
void SelectSort(int R[] int n ) {
int i j k ;
int temp;
for (i=0; i<=n-1; ++i) {
k=i;
for (j=i+1; j<=n; ++j) /*这个循环是算法的关键,它从无序序列中挑出一个最小的元素*/
if (R[k]>R[j]) {
yidong[2]++;
jiaohuan[2]++;
bijiao[2]++;
k=j;
} //每两个数比较时总是把小的挑出来,并且将其放入下一轮比较数据中
/*下面的3句完成最小元素与无序序列第一个元素的交换*/
jiaohuan[2]++;
bijiao[2]++;
yidong[2]+=3;
temp=R[i];
R[i]=R[k];
R[k]=temp;
}
}
int partition(int arr[] int low int high) {
int key;
key = arr[low];
while(low while(low = key ) {
high--;
bijiao[3]++;
}
if(low yidong[3]++;
jiaohuan[3]++;
arr[low++] = arr[high];
bijiao[3]++;
}
while( low low++;
bijiao[3]++;
}
if(low jiaohuan[3]++;
bijiao[3]++;
yidong[3]++;
arr[high--] = arr[low];
}
}
arr[low] = key;
return low;
}
void quickSort(int arr[] int start int end) {
int pos;
if (start bijiao[3]++;
jiaohuan[3]++;
pos = partition(arr start end);
quickSort(arrstartpos-1);
quickSort(arrpos+1end);
}
return;
}
void merge(int src[] int des[] int low int high int mid) {
int i = low;
int k = low;
int j = mid + 1;
while (( i <= mid ) && ( j <= high )) {
bijiao[4]++;
if (src[i] < src[j]) {
des[k+
- 上一篇:学生成绩查询系统c语言
- 下一篇:车票班次管理系统C语言含报告
相关资源
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
评论
共有 条评论