1. 分别用穷举法和欧几里德算法实现求两个整数的最大公约数,并比较算法的效率。
核心代码:
class Solution {
public:
int eaMethod(int a,int b) {//穷举法
int res=1;
int times = a>b?a:b;
for (int i = 1; i <=times;i++) {
if (a % i == 0 && b % i == 0)
res = i;
}
return res;
}
int gcdMethod(int a,int b) {//欧几里德算法
if (b == 0) return a;
else return gcdMethod(b,a%b);
}
};
2. 排序算法效率比较。编程实现以下几种不同的排序算法(以升序为例):冒泡排序、选择排序、 希尔排序、快速排序,比较不同的排序过程的运行时间。具体要求:(1)为了消除数据之间差异导致排序效果的影响,使用相同的数组进行排序,方法为:首先创建一个数组,数组长度至少为100000,数组元素取值范围在[0, 100000]之间的随机正整数,并将这个数组复制4份,分别用不同的排序算法进行排序。(2)记录不同排序算法的运行时间。(3)对完全逆序的情况进行测试,将待排序数组赋值为逆序,即与最终排序要求完全相反。
核心代码:
class Solution {
public:
void bubbleSort(int nums[], int len1) {
int len = len1;
for (int i = 0; i < len; i++) {//控制总的趟数
for (int j = 1; j < len - i; ++j) {//一次冒泡排序的结果
if (nums[j - 1] > nums[j]) swap(nums[j - 1], nums[j]);
}
}
}
void insertionSort(int arr[], int n)
{
int i, j, key;
for (i = 1; i < n; i++)
{
key = arr[i]; j = i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
void shellSort(int arr[], int len)//希尔排序
{
int tmp;
int i;
for (int d = len / 2; d > 0; d /= 2)
{
for (int j = d; j < len; ++j)
{
tmp = arr[j];
for (i = j; i >= d && arr[i - d] > tmp; i -= d)
arr[i] = arr[i - d];
arr[i] = tmp;
}
}
}
void selectionSort(int arr[], int len)//选择排序
{
for (int i = 0; i < len - 1; ++i)
{
int index = i;
for (int j = i + 1; j < len; ++j)
{
if (arr[index] > arr[j])
index = j;
}
swap(arr[index], arr[i]);
}
}
int getStandard(int array[], int i, int j) {
//基准数据
int key = array[i];
while (i < j) {
//因为默认基准是从左边开始,所以从右边开始比较
//当队尾的元素大于等于基准数据 时,就一直向前挪动 j 指针
while (i < j && array[j] >= key) {
j--;
}
//当找到比 array[i] 小的时,就把后面的值 array[j] 赋给它
if (i < j) {
array[i] = array[j];
}
//当队首元素小于等于基准数据 时,就一直向后挪动 i 指针
while (i < j && array[i] <= key) {
i++;
}
//当找到比 array[j] 大的时,就把前面的值 array[i] 赋给它
if (i < j) {
array[j] = array[i];
}
}
//跳出循环时 i 和 j 相等,此时的 i 或 j 就是 key 的正确索引位置
//把基准数据赋给正确位置
array[i] = key;
return i;
}
void QuickSort(int array[], int low, int high) {
//开始默认基准为 low
if (low < high) {
//分段位置下标
int standard = getStandard(array, low, high);
//递归调用排序
//左边排序
QuickSort(array, low, standard - 1);
//右边排序
QuickSort(array, standard + 1, high);
}
}
};