java数据结构与算法分析:冒泡排序

冒泡排序(默认是升序)
时间复杂度:O(n^2)
空间复杂度:O(1)

目标

将数组元素按照从小到大的顺序排列。

思路大的数“下沉”,小的数“上浮”。

比较相邻的两个元素,将大的数放在右边,小的数放在左边。

  • 第一趟循环:比较第一个和第二个数,如果第一个数小于第二个数,顺序不变,反之就交换两个数的位置;接着比较第二和第三个数,方法同上,直到比较完最后两个数,将大的数放在右边,小的放左边。
    结果:第一趟完成后,最后一个数就是该数组元素最大的元素。
  • 第二趟循环:最后一个数(最大的数)不参与循环,按着第一步的方法继续比较、交换。
    结果:第二趟完成后,倒数第二个数就是(仅次于倒数第一个最大的数)倒数第二大的。
  • 第三趟循环:最后两个数不参与循环。。。(以此类推,每次的比较次数-1)
  • 排序完成

代码如下:

//冒泡排序(默认为升序)
public class BubbleSort {
	public static void main(String[] args) {
		int[] data=new int[] {2,3,5,6,8,9,0,1,4,7};
		sort(data);
		printArray(data);
	}
	
	public static void sort(int[] arr) {
		for(int x=0;x<arr.length-1;x++) {
			for(int y=0;y<arr.length-x-1;y++) {
				if(arr[y]>arr[y+1]) {
					int temp=arr[y];
					arr[y]=arr[y+1];
					arr[y+1]=temp;
				}
			}
		}
	}
	
	public static void printArray(int[] arr) {
		for(int x=0;x<arr.length;x++) {
			System.out.print(arr[x]+" ");
		}
	}
}

运行结果:

0 1 2 3 4 5 6 7 8 9

你可能感兴趣的:(Java数据结构与算法分析)