交换排序的基本思想:两两比较待排序元素的关键字,发现两个元素的次序相反时则进行交换,直到没有反序的元素为止。
1. 冒泡排序
/**
* 交换排序
*
* 算法:冒泡排序(Bubble Sort)
* 输入:待排序元素的数组,待排序元素个数
* 输出:
* 原理:通过无序区中相邻元素间关键字的比较和位置的交换,使关键字最小的元素如气泡一般逐渐往上“漂浮”直至“水面”。
整个算法是从最小面的元素开始,对每个相邻的关键字进行比较,且使关键字较小的元素换至关键字较大的元素之上,经过一趟冒泡排序后,关键字最小的元素到达最上端。
接着,再在剩下的元素中找关键字次小的元素,并把它换到第二个位置上。以此类推,直至遍历所有元素。
* 过程:
* 1)从最后一个元素R[n-1]开始,两两相邻元素比较,直至R[0]
* 2)在比较的过程中,如果R[j].key<R[j-1].key,则交换两者的位置,即,使关键字较小的元素换至关键字较大的元素之上
* 3) 经过第一次遍历,最小的元素为R[0]
* 4)从最后一个元素R[n-1]开始,两两相邻元素比较,直至R[1],经过第二次遍历,次小的元素为R[1]
* 5)重复上述操作
* 6)...
* 7)最终得到的R[0..n-1]中的元素递增排序
*
* 时间复杂度为O(n^2),空间复杂度为O(1),稳定的排序方法
* 比直接插入排序要差
*/
void bubbleSort(RecType R[], int n)
{
int i, j;
RecType tmp;
for (i = 0; i < n - 1; i++)
{
//从R[