一、原理:
搜索整个数组,比较相邻元素,如果两者的相对大小次序不符合由小到大,就交换它们,结果是最大值移动到最后一个位置上,也是在最终完成排序数组中合适的位置。然后再次搜索数组,将第二大的值移动到倒数第二个位置上,重复该过程,直到将所有元素移动到正确的位置。
在排序过程中总是小数往前放,大数往后放,像是气泡往上升,所以称作冒泡排序。
例:现在有5个数字:23,90,9,25,16
首先比较23和90,23小于2590则不交换它们的位置。
再比较90和9,90大于9,则交换它们的位置。
依次类推,第一轮结束后,顺序为:23,9,25,16,90
第二轮开始继续从最底比较,结束后顺序应为:9,23,16,25,90
第三轮、第四轮以此类推,结束后的顺序为:9,16,23,25,90
根据例我们可以发现:
第一轮比较时,首先23与90比较,然后90与9比较,然后90与25比较,之后90与16比较,一轮下来一共比较了4次。
第二轮比较时,23与9比较,然后23与25比较,然后25与16比较,因为90已经是最大的数了,所以不参与比较,一共比较了3次。
第三轮比较时,9与23比较,然后23与16比较,一共比较了两次。
第四轮比较时,9与16比较,只比较一次。
则设外层循环变量i=0,四次循环i从0变成3,则i<4,也就是i<数组长度-1。
而内层循环次数从4变到1,则内层循环变量j也就是j<4-I,也就是数组长度-1-i。
二、冒泡排序速记口诀(升序):
N个数字来排队,两两相比小靠前。
外层循环N-1,内层循环N-1-i。
如果要降序排序,只要把程序中的比较的大于号变成小于号就行了。
三、代码:
int[] a=new int[5]{23,90,9,25,16};
//排序数组
int i,j;
//循环变量
int temp;
//临时变量用于交换
for(i=0;i<a.Length-1;i++)
{
//将最大的元素交换到最后
for(j=0;j<a.Length-1-I;j++)
{
if(a[j]>a[j+1])
{
//交换元素
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
//排序后输出
Console.WriteLine(“排序后的数字为:”);
for(int k=0;k<a.Length;k++)
{
Console.Write(“{0}\t”,a[k]);
}