冒泡排序
通过对待排序序列从前向后(从下标较小的元素开始),依次对相邻两个元素的值进行两两比较,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就如果水底下的气泡一样逐渐向上冒。
代码实现:
package 数组.排序算法;
import java.util.Arrays;
/*冒泡排序
依次比较相邻的元素
本次是从小到大排序
* */
public class Bubble_Sort {
public static void main(String[] args) {
int[] a={2,6,3,8,9,1};
System.out.println(Arrays.toString(a));
for (int i = 0; i <a.length-1 ; i++) {
for (int j = 0; j <a.length-1-i; j++) {
if (a[j]>a[j+1]) {//相邻的俩个比较,如果a[j]>a[j+1],则交换位置
int temp=a[j];//设置一个临时变量存放交换位置前的数据
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
运行结果:
选择排序
第一次从待排序的数据元素中选出最小(或最大)的一个元素, 存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素, 然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
代码实现:
package 数组.排序算法;
import java.util.Arrays;
/*选择排序
第一次从待排序的数据元素中选出最小(或最大)的一个元素,
存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,
然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
* */
public class Selection_sort {
public static void main(String[] args) {
int[] a={3,4,2,9,5,8,1,7};
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j < a.length; j++) {
if (a[i]>a[j]) {
int temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
System.out.println(Arrays.toString(a));
method2();
}
}
运行结果:
通过对该算法运算过程的分析,每一次内循环都拿第一个和后面的比较,每比较一次都要交换,这样会加大任务量。我们可以试着在每一次内循环比较的时候,如果满足条件,就先记录下标,等这次内循环结束后再进行更换。这样就可以使内循环只交换一次位置,提高程序的性能。
代码实现(优化后的method2):
package 数组.排序算法;
import java.util.Arrays;
/*选择排序
第一次从待排序的数据元素中选出最小(或最大)的一个元素,
存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,
然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
* */
public class Selection_sort {
public static void main(String[] args) {
int[] a={3,4,2,9,5,8,1,7};
System.out.println(Arrays.toString(a));
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j < a.length; j++) {
if (a[i]>a[j]) {
int temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
System.out.println(Arrays.toString(a));
System.out.println("-----------------------");
method2();
}
//优化
private static void method2(){
int[] a={3,4,2,9,5,8,1,7};
for (int i = 0; i < a.length-1; i++) {
int minIndex=i;
for (int j = i+1; j < a.length; j++) {
if (a[minIndex]>a[j]) {
minIndex=j;
}
}
int temp=a[minIndex];
a[minIndex]=a[i];
a[i]=temp;
}
System.out.println(Arrays.toString(a));
}
}
运行结果: