冒泡排序法
每次排序将最大的一个数字放到数组末尾,第二次排序将第二大的排到数组倒数第二个位置,如此重复,直到排完。
时间复杂度为O(n^2),因为经历了两个for循环。
第一层i的循环代表每个元素都要比较一轮。第二层j=0表示从每一轮都要第一个开始比。
j<a.length - 1 - i的原因是后面i个元素已经排好了,已经为最大的几个了,无需再比较。
public static void bubbleSort() {
int a[] = {5,4,3,2,1};
for (int i=0;i<a.length-1;i++){
//i的循环代表每个元素都要比较一轮。j=0表示从每一轮都要第一个开始比
//j<a.length - 1 - i的原因是后面i个元素已经排好了,已经为最大的几个了,无需再比较、
for (int j=0;j<a.length - 1 - i;j++){
if (a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
//输出排序后的数组
for (int y=0;y<a.length;y++){
System.out.println(a[y]);
}
}
选择排序法
第一次排序时,找到最小的值,与第一个互换,使最小值在第一个位置,第二次排序,再找出除了第一个以外最小的值,与第二位互换,使第二小的数在第二的位置,如此循环。每次将剩余数组中最小值放置到剩余的最前面。
因为经历了两次循环,所以时间复杂度为O(n^2)。
代码如下
public static void selectionSort(){
int a[] = {1,3,2,8,4,5,9,6,7};
for (int i = 0;i<a.length;i++){
//初始化最小值为当前i的值
int flag = i;
for (int j=i;j<a.length;j++){
if (a[flag]>a[j