- 分别用穷举法和欧几里德算法实现求两个整数的最大公约数,并比较算法的效率。
#include <iostream>
using namespace std;
int qiongjufa(int x, int y)
{
int i, n;
n = x;
if (n > y)
n = y;
for (i = n; i > 0; i--)
{
if (x%i == 0 && y%i == 0)
break;
}
return i;
}
int oumm(int a, int b)
{
int r,t;
if (a < b)
{
t = a;
a = b;
b = t;
}
while (a%b)
{
r = a % b;
a = b;
b = r;
r = a % b;
}
return b;
}
int main()
{
int m, n;
cin >> m;
cin >> n;
cout << "穷举法求得" <<m<<","<<n<<"的最大公约数为:"<< qiongjufa(m, n) << endl;
cout << "欧几里得算法求得" << m << "," << n << "的最大公约数为:" << oumm(m, n) << endl;
return 0;
}
运行截图:
- 排序算法效率比较。编程实现以下几种不同的排序算法(以升序为例):冒泡排序、选择排序、 希尔排序、快速排序,比较不同的排序过程的运行时间。具体要求:(1)为了消除数据之间差异导致排序效果的影响,使用相同的数组进行排序,方法为:首先创建一个数组,数组长度至少为100000,数组元素取值范围在[0, 100000]之间的随机正整数,并将这个数组复制4份,分别用不同的排序算法进行排序。(2)记录不同排序算法的运行时间。(3)对完全逆序的情况进行测试,将待排序数组赋值为逆序,即与最终排序要求完全相反。
#include <iostream>
#include <ctime>
#define N 100000
using namespace std;
void maopao(int a[])
{
int i, j,t;
for (i = 0; i < N-1; i++)
{
for (j = 0; j < N-i; j++)
{
if (a[i] > a[i+1])
{
t = a[i];
a[i]= a[i+1];
a[i+1] = t;
}
}
}
}
void choose(int a[])
{
int i,t,j;
for (i = 0; i < N-1; i++)
{
for (j = i + 1; j < N; j++)
{
if (a[i]>a[j])
{
t=a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
void QuickSort(int array[], int start, int last)
{
int i = start;
int j = last;
int temp = array[i];
if (i < j)
{
while (i < j)
{
//
while (i < j && array[j] >= temp)
j--;
if (i < j)
{
array[i] = array[j];
i++;
}
while (i < j && temp > array[i])
i++;
if (i < j)
{
array[j] = array[i];
j--;
}
}
//把基准数放到i位置
array[i] = temp;
//递归方法
QuickSort(array, start, i - 1);
QuickSort(array, i + 1, last);
}
}
//希尔排序
void shellSort(int a[], int len)
{
int insertNum = 0;
int INCRGAP = 2;
unsigned gap = len / INCRGAP ; // 步长初始化,注意如果当len<INCRGAP时,gap为0,所以为了保证进入循环,gap至少为1!!!
while (gap) // while gap>=1
{
for (unsigned i = gap; i < len; ++i) // 分组,在每个子序列中进行插入排序
{
insertNum = a[i];//将当前的元素值先存起来方便后面插入
unsigned j = i;
while (j >= gap && insertNum < a[j - gap])//寻找插入位置
{
a[j] = a[j - gap];
j -= gap;
}
a[j] = insertNum;
}
gap = gap / INCRGAP;
}
}
int main()
{
int a[N];
int i,count=0;
clock_t startTime_m, endTime_m,startTime_c,endTime_c,startTime_x,endTime_x,startTime_f,endTime_f;
for (i = 0; i < N; i++)
{
a[i]=rand()%100000+0;
//cin >> a[i];
}
/*cout << "产生的随机数为:" << endl;
for (i = 0; i < N; i++)
{
cout << a[i] << " ";
count++;
if (count % 1000 == 0)
cout << a[i] << " ";
}*/
startTime_m = clock();
maopao(a);
endTime_m = clock();
cout <<"冒泡排序法的运行时间为:"<< endTime_m - startTime_m << endl;
startTime_c = clock();
choose(a);
endTime_c = clock();
cout << "选择排序法的运行时间为:" << endTime_c - startTime_c << endl;
/*startTime_f = clock();
QuickSort(a,0,N-1);
endTime_f = clock();
cout << "快速排序法的运行时间为:" << endTime_f - startTime_f << endl;
*/
startTime_x = clock();
shellSort(a,N);
endTime_x = clock();
cout << "希尔排序法的运行时间为:" << endTime_x - startTime_x << endl;
return 0;
}
运行截图