是数组操作常用操作之一,通过排序将数组中原来顺序按照升序(从小到大)或降序(从大到小)重新组织。数组排序算法很多,最常用的是冒泡排序。本文演示冒泡排序算法,下面以升序排序为例讲解。
可以理解为需要若干趟相邻元素交换,每趟交换的结果是最大元素排在最后。以下面包含10个元素数组为例。
5 | 7 | 2 | 9 | 4 | 0 | 8 | 6 | 3 | 1 |
每一趟相邻元素交换,原则是前者大于后者,则将两者交换,否则不动。
第一趟:10个元素相邻比较需要9次。最终9排在最后
5 | 7 | 2 | 9 | 4 | 0 | 8 | 6 | 3 | 1 |
5 | 7 | 2 | 9 | 4 | 0 | 8 | 6 | 3 | 1 |
5 | 2 | 7 | 9 | 4 | 0 | 8 | 6 | 3 | 1 |
5 | 2 | 7 | 9 | 4 | 0 | 8 | 6 | 3 | 1 |
5 | 2 | 7 | 4 | 9 | 0 | 8 | 6 | 3 | 1 |
5 | 2 | 7 | 4 | 0 | 9 | 8 | 6 | 3 | 1 |
5 | 2 | 7 | 4 | 0 | 8 | 9 | 6 | 3 | 1 |
5 | 2 | 7 | 4 | 0 | 8 | 6 | 9 | 3 | 1 |
5 | 2 | 7 | 4 | 0 | 8 | 6 | 3 | 9 | 1 |
5 | 2 | 7 | 4 | 0 | 8 | 6 | 3 | 1 | 9 |
第二趟:前9个相邻元素参与比较(因为最后一个已是最大的了,不需要参与)需要8次,最终8排在9之前。
依次类推,每趟比较得互剩余元素最大元素放上趟排序得到最大元素之前,因此需要9次。
代码如下:
public static void main(String[] args) { int[] ={5,7,2,9,4,0,8,6,3,1}; for(int i=0;i<arr.length-1;i++){ for(int j=i;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ int t=arr[j]; arr[j]=arr[j+1]; arr[j+1]=t; } } } for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); }
} |