void Swap(int &a, int &b)
{
int Temp = a;
a = b;
b = Temp;
}
void ShowSortResult(int *Array, int ArraySize)
{
for (int k = 0; k < ArraySize; ++k)
cout << Array[k] << " ";
cout << endl;
}
/*
冒泡排序的原理:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面,逐次比较,
直至将最大的数移到最后。最将剩下的N-1个数继续比较,将次大数移至倒数第二位。依此规律,直至比较结束。
冒泡最大放后排
*/
void BubbleSort(int *Array, int ArraySize)
{
for (int i = 0; i < ArraySize; ++i)
{
for (int j = 0; j < ArraySize - i - 1; ++j) //第一趟将最大数挑出来,排到了最后
{
if (Array[j] > Array[j + 1])
Swap(Array[j], Array[j + 1]);
}
ShowSortResult(Array, ArraySize);
}
}
/*
选择排序的原理:每次在无序队列中“选择”出最小值,放到有序队列的最后,并从无序队列中去除该值。
选择最小放前排
*/
void SelectionSort(int *Array, int ArraySize)
{
for (int i = 0; i < ArraySize; ++i)
{
int min = i;
for (int j = i + 1; j < ArraySize; ++j)
{
if (Array[min] > Array[j])
min = j;
}
if (min != i)
Swap(Array[min], Array[i]);
ShowSortResult(Array, ArraySize);
}
}
/*
插入排序的原理:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的
移动数据,空出一个适当的位置,把待插入的元素放到里面去。
1〉从第一个元素开始,该元素可以认为已经被排序
2〉取出第一个未排序元素存放在临时变量temp中,在已经排序的元素序列中从后往前扫描,逐一比较
3〉如果temp小于已排序元素,将该元素移到下个位置
4〉重复步骤3〉,直到找到已排序的元素小于或者等于
*/
void InsertSort(int *Array, int ArraySize)
{
for (int i = 1; i < ArraySize; ++i) //从第一个元素开始,第0个默认有序
{
int temp = Array[i]; //将第一个元素放入临时变量中
int j;
for (j = i - 1; j >= 0; j--) //需要比较i次,但是因为需要向后移动,所以从i-1开始,>=0结束
{
if (temp < Array[j]) //如果临时变量小于当前值,则将当前值向后移动一位
Array[j + 1] = Array[j];
else //如果临时变量大于当前值,说明找到位置了,跳出循环
break;
}
Array[j+1] = temp; //将临时变量放在j+1的位置上
}
}
int main()
{
int TestArray[10] = { 4, 12, 12, 45, 3, 9, 22, 56, 32, 14 };
int ArrayLength = sizeof(TestArray) / sizeof(int);
/*******************************************/
/* BubbleSort */
/*******************************************/
//cout << "Before Sort :";
//ShowSortResult(TestArray, ArrayLength);
//
//BubbleSort(TestArray, ArrayLength);
//
//cout << "After Sort :";
//ShowSortResult(TestArray, ArrayLength);
/*******************************************/
/* SelectionSort */
/*******************************************/
//cout << "Before Sort :";
//ShowSortResult(TestArray, ArrayLength);
//SelectionSort(TestArray, ArrayLength);
//cout << "After Sort :";
//ShowSortResult(TestArray, ArrayLength);
/*******************************************/
/* InsertSort */
/*******************************************/
cout << "Before Sort :";
ShowSortResult(TestArray, ArrayLength);
InsertSort(TestArray, ArrayLength);
cout << "After Sort :";
ShowSortResult(TestArray, ArrayLength);
system("pause");
return 0;
}
参考文章:
http://blog.csdn.net/xcbeyond/article/details/7341562
http://blog.csdn.net/wdkirchhoff/article/details/41787145