算法一:插入排序(增量模式)
NOTE THAT :在同等的输入规模情况下,插入排序依据初始输入的不同,其运行时间会有差异(分析:最佳情况、最坏情况、平均情况)。
#include "iostream"
using namespace std;
// date : 2017.12.18 By:dlphay
// INSERTION_SORT_DLY
int main()
{
int A[6] = {31, 41, 59, 26, 41, 58};
int i = 0;
int j = 0;
int value = 0;
for (i = 0; i < 6; i++)
{
cout << A[i] << "\t" << endl;
if (i == 5) cout << "\n" << endl;
}
for (j = 1; j < 6; j++)
{
value = A[j];
i = j - 1;
// sort
while ((value < A[i]) && (i >= 0))
{
A[i + 1] = A[i];
i--;
}
A[i+1] = value;
}
for (i = 0; i < 6; i++)
{
cout << A[i] << "\t" << endl;
//if(i == 5) cout <<"\n" << endl;
}
system("pause");
return 0;
}
#include "iostream"
using namespace std;
// date : 2017.12.18 By:dlphay
// INSERTION_SORT_DLY
int main()
{
int A[6] = {31, 41, 59, 26, 41, 58};
int i = 0;
int j = 0;
int value = 0;
for (i = 0; i < 6; i++)
{
cout << A[i] << "\t" << endl;
if (i == 5) cout << "\n" << endl;
}
for (j = 1; j < 6; j++)
{
value = A[j];
// sort
for (i = j - 1; (i >= 0) && (A[i] > value); i--)
{
A[i+1] = A[i];
}
A[i + 1] = value;
}
for (i = 0; i < 6; i++)
{
cout << A[i] << "\t" << endl;
}
system("pause");
return 0;
}
算法二:归并排序(分治模式)
NOTE THAT : 归并排序:利用归并的思想实现的排序方法,通过对问题进行:分解-解决-合并来进行,分治法 将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之。#include "iostream"
using namespace std;
// date : 2017.12.19 By:dlphay
// MERGE_SORT_DLY
//治
void MERGE(int *data, int p, int q, int r)
{
int n = r - p + 1;
int k = p; //左端点
int *TEMP_ARR = (int *)malloc(sizeof(int)*n);
int left_END = q;
int right_END = r;
int temp_pos = 0;
q = q +1;
while ((p <= left_END) && (q <= right_END))
{
if (data[p] <= data[q])
{
TEMP_ARR[temp_pos++] = data[p++];
}
else
{
TEMP_ARR[temp_pos++] = data[q++];
}
}
while (p <= left_END)
{
TEMP_ARR[temp_pos++] = data[p++];
}
while (q <= right_END)
{
TEMP_ARR[temp_pos++] = data[q++];
}
temp_pos = 0;
int i;
for ( i = k; i <= r; i++)
{
data[i] = TEMP_ARR[temp_pos++];
}
}
//分
void MERGE_SORT(int *A, int p, int r)
{
if (p > r)
{
return;
}
if (r > p)
{
int q = (p + r) / 2;
MERGE_SORT(A, p, q);
MERGE_SORT(A, q + 1, r);
MERGE(A, p, q, r);
}
}
void PRINT_ARR(int *A, int n)
{
int i;
for (i = 0; i < n; i++)
{
cout << A[i] << endl;
if(i == (n-1)) cout << "\n" << endl;
}
}
int main()
{
int B[8] = { 50, 10, 20 ,15, 30, 60 ,90 ,5 };
PRINT_ARR(B, 8);
MERGE_SORT(B, 0, 7);
PRINT_ARR(B, 8);
system("pause");
return 0;
}