📄 4.cpp
字号:
#include<iostream>
using namespace std;
class elem
{
public:
int key;
char other;
};
//1、存储结构类定义与实现:
//自定义如下:
class seqlist
{
public:
seqlist(int n1);
void insertsort();//直接插入排序
void bubblesort();
void shellsort();
int partition(int first, int end);
void quicksort(int first, int end);
void easysort();
void print();
int quicknum1;//计算快速排序移动数据次数
int quicknum2;//计算快速排序比较数据次数
private:
elem data[200];
int n;
};
seqlist::seqlist(int n1)
{
quicknum1=0;
quicknum2=0;
int temp;
n=n1;
int i=0;
while(i<n1)
{
data[i+1].key=temp%123;
temp=temp+temp*i;
if(i%2==0)
temp=temp+2000000;
i++;
}
}
void seqlist::print()
{
for(int i=0;i<n;i++)
{
cout << data[i+1].key << " " ;
}
cout << endl ;
}
//2、起泡排序算法
void seqlist::bubblesort()
{
int num1=0,num2=0;
int i=n-1,j;
for(;i>0;i--)
{
for(j=1;j<i+1;j++)
{
if(data[j].key<data[j+1].key && num2++)
{
int temp;
temp=data[j].key; num1++;
data[j].key=data[j+1].key; num1++;
data[j+1].key=temp; num1++;
}
}
}
cout << "移动次数为:" << num1 << endl ;
cout << "比较次数为:" << num2 << endl ;
}
//3、接直接插入排序算法
void seqlist::insertsort()
{
int i,j;
for(i=2;i<=n;i++)
{
data[0]=data[i];
j=i-1;
while(data[0].key<data[j].key)
{
data[j+1]=data[j];
j--;
}
data[j+1]=data[0];
}
}
//4、简单选择排序算法
void seqlist::easysort()
{
int num1=0,num2=0;
cout << "easysort!!" << endl ;
for(int i=1;i<n;i++)
{
int min=data[i].key; num1++;
for(int j=i;j<n+1;j++)
{
if(data[j].key>min && num2++)
{
min=data[j].key; num1++;
data[j].key=data[i].key; num1++;
data[i].key=min; num1++;
}
}
}
cout << "移动次数为:" << num1 << endl ;
cout << "比较次数为:" << num1 << endl ;
}
//5、快速排序算法
int seqlist::partition(int first, int end)
{
int i(first),j(end);
while (i<j)
{
while(i<j && data[i].key<data[j].key && quicknum2++)
j--;
if (i<j)
{
elem temp;
temp=data[i]; quicknum1++;
data[i]=data[j]; quicknum1++;
data[j]=temp; quicknum1++;
}
while (i<j && data[i].key<= data[j].key && quicknum2++)
i++;
if (i<j)
{
elem temp;
temp=data[i]; quicknum1++;
data[i]=data[j]; quicknum1++;
data[j]=temp; quicknum1++;
j--;
}
}
return i;
}
void seqlist::quicksort(int first,int end)
{
int pivotpos;
if (first < end)
{
pivotpos = partition (first, end );
quicksort ( first, pivotpos-1);
quicksort ( pivotpos+1, end );
}
}
//6、希尔排序算法
void seqlist::shellsort()
{
int num1=0,num2=0;
int i,j;
for(int d=n/2;d>=1;d=d/2)
{
for(i=d+1;i<=n;i++)
{
data[0]=data[i]; num1++;
j=i-d;
while(j>0 && data[0].key<data[j].key && num2++)
{
data[j+d]=data[j]; num1++;
j=j-d;
}
data[j+d]=data[0]; num1++;
}
}
cout << "移动次数为:" << num1 << endl ;
cout << "比较次数为:" << num1 << endl ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -