冒泡排序和插入排序@TOC
共同点:
冒泡排序和插入排序在排序算法中属于非常简单的类型
都需要通过双重循环实现排序的功能并且每一次外循环都会确定一位元素在数组中的位置
不同点:
冒泡排序一次外循环一般情况需要进行大量的元素的相互交换,而选择排序通过一个临时变量记录下标的方式避免了这种情况的出现,所以在一般情况下选择排序的花费时间比冒泡稍好
冒泡排序的实现:
public static void sort(int[] arr){
if(arr == null) return;
//标识符,外循环一次如果出现元素从未被交换过说明当前数组已然有序,结束排序
boolean flag = true;
for (int i = 0; i < arr.length; i++) {
flag = true;
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j]>arr[j+1]){
arr[j] = arr[j] ^ arr[j+1];
arr[j+1] = arr[j] ^ arr[j+1];
arr[j] = arr[j] ^ arr[j+1];
flag = false;
}
}
if(flag) return;
}
}
选择排序的实现:
public static void sort(int[] arr){
for (int i = 0; i <arr.length ; i++) {
int temp = 0;
int end = arr.length-i-1;
for (int j = 1; j <= end; j++) {
if(arr[temp] < arr[j]){
temp = j;
}
}
if(temp!=end){
arr[temp] = arr[temp] ^ arr[end];
arr[end] = arr[temp] ^ arr[end];
arr[temp] = arr[temp] ^ arr[end];
}
}
}