排序(一) 简单交换排序 by斜风细雨QQ:253786989 2012-02-01
样例代码:
// 简单交换排序
int data[9] = {8, 2, 1, 4, 9, 5, 7, 3, 6};
for (int i = 0; i < 9; ++i)
{
for (int j = i+1; j < 9; ++j)
{
if (data[i] > data[j])
{
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
思想:
以上面的代码为例,首先用第1个位置上的数字,与第2-9位置上的数字依次比较,如果大于它们,则交换数据。这样一个循环之后,第1个位置上的数字肯定是9个数据中最小的一个,也就是1。
首先是8和2比较,8比2大,交换之后数据序列为:2, 8, 1, 4, 9, 5, 7, 3, 6。之后2与1进行比较,2比1大,交换之后数据序列为:1, 8, 2, 4, 9, 5, 7, 3, 6。然后是1与4进行比较,1比4小,不做数据交换。同理依次将第一个位置的数据1与其他数据进行比较,一直比较到最后一个位置上的数据6。这样一个循环之后,数据序列为:1, 8, 2, 4, 9, 5, 7, 3, 6。第1个位置上的数据是9个数据中最小的数据1。
然后进行第2轮比较,将第2个位置上的数字,依次与第3-9位置上的数字进行比较。首先是8比2大,交换之后的数据序列为:1, 2, 8, 4, 9, 5, 7, 3, 6。然后是2依次与8, 4, 9, 5, 7, 3, 6比较,均不做数据交换。这样一轮交换之后,数据序列为:1, 2, 8, 4, 9, 5, 7, 3, 6。经过上面两轮数据交换,前两个位置上的数据已经是有序的了。
之后进行第3轮比较,也就是将第3个位置上的数字,依次与第4-9位置上的数字进行比较交换。
依此类推。
理解排序程序算法的最佳途径应该是调试程序,监测data数组中的数据序列的变化过程:
时间复杂度:
O(n2)
排序(一) 简单交换排序 by斜风细雨QQ:253786989 2012-02-01