资源简介

五种内部排序算法性能比较, 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+

评论

共有 条评论