排序算法
/**
* 冒泡排序
* @param arr
* @return
* 重复arr.length次循环,每次循环都是相邻两个数比较,较大的放在后面
*/
public static int[] maopaoSort(int[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
/** * 冒泡排序(改进) * @param arr * @return
* 如果在一次循环中没有发生数据交换,说明数组已经排序好了,直接退出循环
*/ public static int[] maoPaoSort(int[] arr){ boolean flag=false; for(int i=0;i<arr.length-1;i++){ for(int j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; flag=true; } } if(flag){ break; } } return arr; }
选择排序:
/** * 选择排序 * @param arr * @return * 循环arr.length次,第一次循环将第一个数和后面的所有数所比较如果大于后面的数则交换位置 * 第二次从第二个数开始和后面的数比较,以此类推。 */ public static int[] selectSort(int[] arr){ for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ if (arr[i]>arr[j]){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr; }
插入排序:
/** * 插入排序 * @param array * @return */ public static int[] insertSort(int[] array){ /*直接插入排序 在排序之前我们需要搞清一个思路,新插入一个数据的时候,排序过后的数组都是 从小到大排列好的,所以我们需要从后往前查找,直到找到比我们要插入的数字还小的 值。这个时候我们需要一个变量j作为标识*/ for(int i = 1;i<array.length;i++){ int temp = array[i]; int j; for(j = i-1;j>=0;j--){ //将大于temp的数向后移动一步 if(array[j]>temp){ array[j+1] = array[j];//记录j的值也就是temp要插入的位置 }else{ break; } } array[j+1] = temp; } return array; }