思想(升序):
1.比较两个相邻数据之间的大小,保证大的值在后面,最后,经过一次排序后会选出本次数组中的最大值,放在最后一位;
2.在排除上一次的最大值数组中,再选出一位最大值放在最后一位;
3.直到排除(选出)数组长度-1个最大值后,排序完成;
比如:数组为{10 ,34 ,300 ,56 ,6, 56 ,7 ,87 , 5}数组长度为9;
public class find_em { public static void main(String[] args){ int arr[]={10,34,300,56,6,56,7,87,5}; System.out.println("原始数据:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } System.out.println(" 排序(升序):"); //冒泡排序 for(int j=1;j<arr.length;j++){ //控制循环次数,也就是选出几个最大值后停止 for(int i=0;i<arr.length-j;i++){ //交换数据,选出最大值 if(arr[i]>arr[i+1]){ //如果是降序只要将这里改为<号即可 int t=arr[i+1]; arr[i+1]=arr[i]; arr[i]=t; } } for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } System.out.println("选出本次最大值:"+arr[arr.length-j]); } System.out.println("排序后的数据:"); for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } } }
结果:
原始数据: 10 34 300 56 6 56 7 87 5 排序(升序): 10 34 56 6 56 7 87 5 300 选出本次最大值:300 10 34 6 56 7 56 5 87 300 选出本次最大值:87 10 6 34 7 56 5 56 87 300 选出本次最大值:56 6 10 7 34 5 56 56 87 300 选出本次最大值:56 6 7 10 5 34 56 56 87 300 选出本次最大值:34 6 7 5 10 34 56 56 87 300 选出本次最大值:10 6 5 7 10 34 56 56 87 300 选出本次最大值:7 5 6 7 10 34 56 56 87 300 选出本次最大值:6 排序后的数据: 5 6 7 10 34 56 56 87 300
比较次数:36
交换次数:20