#include <iostream>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
1.二分查找(搜索)
int main()
{
const int nSIZE = 6;
int n[nSIZE] = { 1,2,3,5,7,10};
vector<int> initA(n, n + nSIZE);
int searchM = 2;
int left = 0; int right = nSIZE-1;
while (left <= right)
{
int middle = (left + right) / 2;
if (initA[middle] == searchM)
{
cout << "在数组中位置:"<<middle << endl;
system("pause");
return 0;
}
if (initA[middle]>searchM)
right = middle - 1;
if (initA[middle]<searchM)
left = middle + 1;
}
cout << "do not find!" << endl;
system("pause");
return -1;
}
2.插入排序
int main()
{
const int nSIZE = 10;
int n[nSIZE] = { 22, 11, 33, 55, 40, 22, 11, 33, 55, 40 };
vector<int> initA(n, n + nSIZE);
for (int j= 1; j < nSIZE; j++)
{
for (int i = j; i >0; i--)
{
if (initA[i]<initA[i-1])
{
int temp = initA[i];
initA[i] = initA[i - 1];
initA[i-1] = temp;
}
else
break;
}
}
for (int j = 0; j < initA.size(); j++)
cout << initA[j] << endl;
return 0;
}
3.快速排序
void quickSort(int s[], int l, int r)// int l:这是l.不是一
{
if (l< r)
{
int i = l, j = r, x = s[l];
while (i < j)
{
while (i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if (i < j)
s[i++] = s[j];
while (i < j && s[i]< x) // 从左向右找第一个大于等于x的数
i++;
if (i < j)
s[j--] = s[i];
}
s[i] = x;
//cout << i<<" " << j << endl;
quickSort(s, l, i - 1); // 递归调用
quickSort(s, i + 1, r);
}
}//
int main()
{
int array[] = { 34, 65, 12, 43, 67, 78, 78, 10, 3, 70 }, k;
int len = sizeof(array) / sizeof(int);
cout << "orginal arrayare:" << endl;
for (k = 0; k<len; k++)
cout << array[k] << ",";
cout << endl;
quickSort(array, 0, len - 1);
cout << "quickSorted arrayare:" << endl;
for (k = 0; k<len; k++)
cout << array[k] << ",";
cout << endl;
}
4.因式分解
int main()
{
vector<int>res;
int M = 30;
int index = 0;//终止符号-1
cout << M << "==";
while (index==0)
{
int flag = 0;
for (int i = 2; i <=sqrt(M); i++)
{
if (M%i == 0)
{
M = M / i;
flag = -1;
res.push_back(i);
break;
}
}
if (flag==0)
{
index = -1;
res.push_back(M);
}
}
//cout
for (int h = 0; h < res.size() - 1; h++)
cout << res[h] << "*";
cout << res[res.size() - 1] << endl;
return 0;
}
5.快排2(过程更容易理解)
#include <stdio.h>
int n = 5;
int a[5] = {3,2,1,5,5};
void MYquickSort(int left, int right)
{
if (left > right)
{
return;
}
int i = left; //注意①i=left+1,就会报错!!!
int j = right;
int tempB = a[left];
while (i != j)
{
while (a[j] >= tempB && i<j)//注意②:先递减j,再递加i,否则错!!! 注意③ && i<j要加进去,否则错!!!
j--;
while (a[i] <= tempB && i<j)
i++;
//swap;
if (i < j)
{
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
//swap2:
a[left] = a[i];
a[i] = tempB;
MYquickSort(left, i - 1);
MYquickSort(i + 1, right);
}
void quicksort(int left, int right)
{
int i, j, t, temp;
if (left>right)
return;
temp = a[left]; //temp中存的就是基准数
i = left;
j = right;
while (i != j)
{
//顺序很重要,要先从右边开始找
while (a[j] >= temp && i<j)
j--;
//再找右边的
while (a[i] <= temp && i<j)
i++;
//交换两个数在数组中的位置
if (i<j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
//最终将基准数归位
a[left] = a[i];
a[i] = temp;
quicksort(left, i - 1);//继续处理左边的,这里是一个递归的过程
quicksort(i + 1, right);//继续处理右边的 ,这里是一个递归的过程
}
int main()
{
//读入数据
//n = 5;
//for (i = 0; i <n; i++)
// scanf("%d", &a[i]);
MYquickSort(0, n - 1); //快速排序调用
//输出排序后的结果
for (int i = 0; i <n; i++)
printf("%d ", a[i]);
getchar();
return 0;
}
6.归并排序
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int n = 5;
int a[5] = {3,2,1,5,5};
void merge(int left,int mid,int right)
{
int i = left; int iright = mid;
int j = mid + 1; int jright = right;
vector<int> temp;
while ((i != iright + 1) && (j != jright + 1))
{
if (a[i] <= a[j])
{
temp.push_back(a[i]);
i++;
}
else
{
temp.push_back(a[j]);
j++;
}
}
if (i == iright + 1)
for (int jj = j; jj != jright + 1; jj++)
{
temp.push_back(a[jj]);
}
if (j == jright + 1)
for (int ii = i; ii != iright + 1; ii++)
{
temp.push_back(a[ii]);
}
//
int idx = 0;
for (int hh = left; hh <= right; hh++)
{
a[hh] = temp[idx];
idx++;
}
}
void MYmergeSort(int left, int right)
{
if (left>=right)
return;
int mid = (left + right) / 2;
MYmergeSort(left, mid);
MYmergeSort(mid + 1, right);
merge(left,mid,right);
}
int main()
{
MYmergeSort(0, n - 1);
//输出排序后的结果
for (int i = 0; i <n; i++)
printf("%d ", a[i]);
system("pause");
return 0;
}