#include<iostream>
using namespace std;
void move(char from, char to)
{
cout << from << "---->" << to << endl;
}
void haoi(int n, char a, char b, char c)
{
if (1 == n)
{
move(a, c);
}
else
{
haoi(n - 1, a, c, b);
move(a, c);
haoi(n - 1, b, a, c);
}
}
int main01()
{
haoi(3, 'A', 'B', 'C');
return 0;
}
//二分查找
int brnarySearch(int *a, int start, int end, int aim)
{
int mid = (end + start) / 2;
if (aim == a[mid])//找到
{
return mid;
}
else {
if (aim < a[mid])
{
return brnarySearch(a, start, mid - 1, aim);//前
}
else
{
return brnarySearch(a, mid + 1, end, aim);//后
}
}
}
int main02()
{
int a[] = { 1,3,7,8,10,13,15 };
int len = sizeof(a) / sizeof(int);
int pos = brnarySearch(a, 0, len - 1, 7);
cout << "is" << " a[" << pos << "]" << endl;
return 0;
}
//归并排序
void Merge(int *a, int Begin, int mid, int End)
{
int *b = new int[(End - Begin + 1)*sizeof(int)];
int i = Begin;
int j = mid + 1;
int k = 0;
//合并到b[]中
while (i <= mid && j <= End) {
if (a[i] <= a[j]) {
b[k++] = a[i++];
}
else {
b[k++] = a[j++];
}
}
while (i <= mid) {
b[k++] = a[i++];
}
while (j <= End) {
b[k++] = a[j++];
}
// 复制回a[]中
for (int m = 0; m < k; m++) {
a[Begin + m] = b[m];
}
delete[]b;
}
void mergeSort(int *a, int Begin, int End)
{
int mid = (Begin + End) / 2;
if (Begin >= End)
return;
else {
mergeSort(a, Begin, mid); // 划分前半部分
//Merge(a, Begin, mid, End);// 合并
mergeSort(a, mid + 1, End); // 划分后半部分
Merge(a, Begin, mid, End);// 合并
}
}
void show(int *a, int len)
{
for (int i = 0; i < len; i++)
cout << a[i] << " ";
cout << endl;
}
int main()
{
int a[] = { 5, 7, 2, 8, 1, 3, 6 };
int len = sizeof(a) / sizeof(int);
mergeSort(a, 0, len - 1);
Merge(a, 0, 3, 6);
show(a, len);
return 0;
}
简单一些算法
最新推荐文章于 2022-01-19 09:48:18 发布