冒泡排序:
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从小到大)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
第一种方法:
从前往后的遍历,每次将最大的数冒出至最后一位。
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] + " ");
}
}