冒泡与选择排序
2019-07-30 本文已影响0人
chris_irving
优化版冒泡排序
public static void bubbleSort(int[] array) {
//1 2 3 4 5 9 4 6 7
for (int i = array.length - 1; i > 0; i--) {
boolean flag = true;//添加标志位是为了检测如果在某趟循环中没有数据交换,就表示排序完成,可以直接退出循环
for (int j = 0; j < i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = false;
}
}
if (flag) {
break;
}
}
}
选择排序
public static void selectSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
int index = i;
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[index]) {
index = j;
}
}
//{1,2,5,8,3,9,4,6,7};
if (index != i) {//如果已经是最小的,就不需要交换
int temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
}
数据交换常用三种算法对比
@Test
public void testSwap() {
int a = 2;
int b = 4;
//1 可读性最好的
// int t=a; a=b; b=t;
//2 不占用额外资源
// a=a+b;
// b=a-b;
// a=a-b;
//3 性能最优(没有可读性)一般用在 无人机 嵌入式设备等对内存要求严苛的环境中
//异或操作符(口诀:相同取0,相异取1)
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a=" + a + "--b=" + b);
}