#pragma once
/**//*
--- 冒泡排序 ---
自下而上的两两比较,小泡排在大泡前,一趟冒出一个最小泡。
*/
void BubbleSort(int nArray[], int nLength)
{
int i = nLength - 1;
int j = 0;
int temp = 0;
for (int i = nLength - 1; i > 0; --i)
{
for (int j = nLength - 2; j >= nLength - i - 1 ; --j)
{
if (nArray[j] > nArray[j + 1])
{
temp = nArray[j + 1];
nArray[j + 1] = nArray[j];
nArray[j] = temp;
}
}
}
}
/**//*
--- 选择排序 ---
自下而上的两两比较,记录最小数的下标,将最上面的数与最小数交换。
*/
void SelectSort(int nArray[], int nLength)
{
int tempIndex = 0;
int tempValue = 0;
for (int i = 0; i < nLength; ++i)
{
tempIndex = i;
for (int j = i + 1; j < nLength; ++j)
{
if (nArray[tempIndex] > nArray[j])
{
tempIndex = j;
}
}
tempValue = nArray[i];
nArray[i] = nArray[tempIndex];
nArray[tempIndex] = tempValue;
}
}
/**//*
--- 插入排序 ---
将数据插入到已排序的序列中,边找合适的位置,边移动数据,找到合适位置插入数据。
*/
void InsertSort(int nArray[], int nLength)
{
for (int i = 1; i < nLength; ++i)
{
int temp = nArray[i];
int j = i;
for (; j > 0 && nArray[j - 1] > temp; --j)
{
nArray[j] = nArray[j - 1];
}
nArray[j] = temp;
}
}
/**//*
--- 快速排序 ---
是对冒泡排序的改进。
1.先从数列中取出一个数作为基准数;
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边;
3.再对左右区间重复第二步,直到各区间只有一个数.
分区过程可以形象的描述为“挖坑填数”:
1.将基准数nBase挖出形成第一个坑nArray[nLow];
2.nHigh--由后向前找比nBase小的数,找到后挖出此数填前一个坑nArray[nLow]中;
3.nLow++由前向后找比nBase大的数,找到后也挖出此数填到前一个坑nArray[nHigh]中;
4.再重复执行2,3二步,直到nLow==nHigh,将基准数nBase填入nArray[nLow]中.
*/
int AdjustArray(int nArray[], int nLow, int nHigh)
{
int nBase = nArray[nLow];
while(nLow < nHigh)
{
while(nLow < nHigh && nBase <= nArray[nHigh])
--nHigh;
if (nLow < nHigh)
{
nArray[nLow++] = nArray[nHigh];
}
while(nLow < nHigh && nBase > nArray[nLow])
++nLow;
if (nLow < nHigh)
{