资源简介
五种内部排序算法性能比较, 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语言含报告
相关资源
- More effective C++ 中文版, 35个改善编程
- apriori算法(C++实现)28359
- 五子棋(棋盘)(MFC编写)
- 基于vc6开发的计算器
- C++语言编写的输入法精简模型
- 魔王语言c++
- libstdc++.so.6.0.20
- sobel边缘检测的c/c++代码
- 杭电ACMonline习题答案-C++版
- C++录屏代码
- c++ qt 静态函数中发信号
- 简单的通讯录程序 c++
- get internet time.zip
- C++ 汉字识别源代码
- 理发师问题C++版程序代码
- 《计算机图形学》实验报告C++
- jacobi符号计算
- 在线考试系统VC++MFC
- VC++ 视频播放器 程序及源码
- 用C++链表结构实现多项式的加法,乘
- 深信服笔试题目C语言和C++
- BP三层神经网络实现C++代码注释详细
- Forstner点特征提取源文件,C++版本
- C 语言编译器源码
- 《信息学奥赛课课通C++》49375-00配套资
- UE4C++写入CSV文件.docx
- 学生选修课系统设计.rar
- 模拟ATM机存取款管理设计.rar
- 用C++写的简单的表白小程序.zip
- C++内存泄漏演示程序
评论
共有 条评论