冒泡排序:
第1趟:依次比较0和1、1和2.......n-2和n-1索引位置的元素,如果发现一个数比他后面的数大,则交换着两个数的位置,经过第一趟排序,最大的数排在了数组的最后面。
第2趟:依次比较0和1、1和2.......n-3和n-2索引位置的元素,如果发现一个数比他后面的数大,则交换着两个数的位置,经过第2趟排序,0-n-2区间中最大的数排在了数组的倒数第二个位置。
.......
第n-1趟排序:比较0和1,如果发现一个数比他后面的数大,则交换着两个数的位置。
实际上冒泡排序的每趟交换结束,不仅可以得到当前的最大值,还能部分有序前面其他的元素,如果某趟一次交换也没有发生,说明数组已经全部有序,可以提前结束。
public void bubbleSort(int[] array)
{
//需要进行n-1趟交换
for (int i = 0; i < array.length-1; i++)
{
boolean flag = false;
//每趟交换
for (int j = 0; j < array.length-1-i; j++)
{
if(array[j] > array[j+1])
{
swap(array,j,j+1);
flag = true;//如果进行交换了,则flag=true;
}
}
//如果flag==false说明这趟没有进行一次交换,此时数组寂静全部有序,可以退出程序
if(flag == false)
{
break;
}
}
}
private void swap(int[] array, int i , int j)
{
int temp = array[j];
array[j] = array[i];
array[i]=temp;
}