java两种冒泡排序方法及两种输出方式

 

冒泡排序:

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从小到大)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。

第一种方法:

从前往后的遍历,每次将最大的数冒出至最后一位。

public class Sort {
	// 冒泡排序
	// 从零号下标开始遍历,每次将最大的冒出。
	public static void main(String[] args) {
		int a[] = { 7, 9, 5, 10, 6, 8 };
		Sort.bubbleSort(a);
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + "  ");
		}
	}

	public static void bubbleSort(int[] a) {
		int tmp = 0;
		for (int i = 0; i < a.length - 1; i++) {// 排几次序,a.length-1是因为最后一次只剩一个数不用排
			for (int j = 0; j < a.length - 1 - i; j++) {//内部比较几次,length-i-1是因为每次会有i个数是已经排好了的
				if (a[j] > a[j + 1]) {
					tmp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = tmp;
				}
			}
			
		}
	}

第二种方法:

从后往前遍历,每次将最小的冒出至前面即i的位置。

public class Sort {
	// 冒泡排序
	// 从最后一个下标开始遍历,每次将最小的冒出。
	public static void main(String[] args) {
		int a[] = { 7, 9, 5, 10, 6, 8 };
		Sort.bubbleSort(a);
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + "  ");
		}

	}

	public static void bubbleSort(int[] a) {
		int tmp = 0;
		for (int i = 0; i < a.length - 1; i++) {// a.length-1是因为最后一次只剩一个数不用排
			for (int j = (a.length - 1); j > i; j--) {// a.length-1是因为要从总后一个往前遍历
				if (a[j] < a[j - 1]) {
					tmp = a[j];
					a[j] = a[j - 1];
					a[j - 1] = tmp;
				}
			}

		}
	}

两种输出方式区别主要在i循环结束条件,

第一种输出:i循环为循环次数,因为最后一次数字是排列好的,不用在比较,因此结束为i=a.lenght-1;

而第二种输出:由于直接遍历一次输出一个数组元素,因此要循环至i=a.length;而且输出为逆序输出。

public class Sort {
	public static void main(String[] args) {
		int a[] = { 7, 9, 5, 10, 6, 8 };
		Sort.bubbleSort(a);
	}

	public static void bubbleSort(int[] a) {
		int tmp;
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a.length - i - 1; j++) 
			{
				if (a[j] > a[j + 1]) {
					tmp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = tmp;

				}
			}
			System.out.print(a[a.length - i - 1] + "  ");
		}
	}

猜你喜欢

转载自blog.csdn.net/HY845638534/article/details/84145593