交换排序:利用交换元素的位置进行排序的方法称为交换排序。常用的交换排序有冒泡排序和快速排序。
冒泡排序算法:
基本思想:n个元素,序列进行N-1次循环,依次比较相邻两个元素的大小,如果array[i]>array[i+1],则交换两个元素,反之则不交换。这样每次循环都能比较出数值最大的那个元素。
最好最坏情况:
最好情况是正序,时间复杂度是O(N),比较次数为n-1次
最坏情况是逆序,时间复杂度是O(N2),比较次数为n(n-1)/2
步骤:
初始序列:49 38 65 97 76 13 27 49*
-
38 49 65 76 13 27 49* 97
-
38 49 65 13 27 49* 76 97
-
38 49 13 27 49* 65 76 97
-
38 13 27 49 49* 65 76 97
-
13 27 38 49 49* 65 76 97
-
13 27 38 49 49* 65 76 97
-
13 27 38 49 49* 65 76 97
-
13 27 38 49 49* 65 76 97
根据过程可以看出冒泡排序是一个稳定排序算法。
算法代码:
//冒泡排序(稳定算法)
void MaoPaoSort(int *array,int len)
{
int i, j;
int temp;
for (i = 0; i < len; ++i)
{
for (j = 1; j < len - i; j++)
{
if (array[j] <array[j-1])
{
temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
}
可以将冒