int [] array = new int [*] ;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ;i++)
{
for (int j = i + 1 ; j < array.Length ;j++)
{
if (array[j] < array[i])
{
temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}
}
可能第一眼看这个会有点看不懂,为了方便理解,我们先来结合图形看一下。
冒泡排序,故名思意,根据常识,依次与相邻的泡泡相比较,小的泡泡会浮在上面,而较大的泡泡会在下面,这里有3个泡泡,一开始,先看这个图1,由大到小向下排列,然后进行第一次排序,第一次排序又有两个小过程,先是大泡跟中泡相比较,因为大泡比中泡大,所以大泡跟中泡交换,过程2,然后再比较大泡跟小泡,因为小泡比大泡轻,所以小泡跟大泡交换。最后看图3,先来比较中泡跟小泡,因为小泡比中泡轻,所以小泡跟中泡交换,再比较中泡跟大泡,因为中泡比大泡轻,所以不用发生交换。
分析了这个过程,我们再来用数字做下练习,就用今天的日期好了,20,12,7,26
第一次排序:过程1: 20跟12较,12比20小,12与20交换;结果:12,20,7,26
过程2: 20跟7比较,7比20小,7与20交换;结果:12,7,20,26
过程3: 20跟26比较,20比26小,不发生交换;结果:12,7,20,26
第二次排序:过程1: 12跟7比较,7比12小,7与12交换;结果:7,12,20,26
过程2: 12跟20比较,12比20小,不发生交换;结果:7,12,20,26
过程3: 20跟26比较, 20比26小,不发生交换;结果:7,12,20,26
结合上面这两个例子,再来看一开始发的算法,就很好理解了,首先进行一次外循环,从第一个数到倒数第二个数,外循环里再进行一次内循环,从第二个数到倒数第一个数。在循环体内两两相比较,前者比后者大,则交换,否则不交换。还有就是冒泡算法,进行最多循环次数是数组长度-1。