前段时间总结几种基础的排序算法
1.直接插入排序
原理:默认arr的前i-1个数据是有序的,找到第i个数据应该插入的位置。
将要插入的第i个数据与第i-1号下标比较, *若i>i-1 说明任然有序,继续i+1个数据
*若i<i-1 则arr[j+1]=arr[j] 继续与i-2个数据比较
以此类推 最后插入到找到的数据前。
public static void sort(int[] arr){
int temp;
for (int i=1;i<arr.length;i++){
if (arr[i]<arr[i-1]){//如果 需要排序
temp=arr[i];//保存目标的数据
int j;
for ( j=i-1;j>=0 && arr[j]>temp;j--){//找到第一个比目标数据小的位置
arr[j+1]=arr[j];//比目标大的数据 依次往后
}
arr[j+1]=temp;
}
}
}
2. 选择排序
原理:简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换。以此类推,一直到待排序的数列中只有一个元素时为止。
private static void sort(int[] arr) {
int temp,i,j,index=0;
for ( i=0; i<arr.length-1;i++) {//第一趟 先给第1个下标找到最小的值
index=i;//用下标来记录数组最小的值的位置
for (j=i+1; j<arr.length;j++){//遍历来找到位置
if (arr[j]<arr[index]){
index=j;//最小值的位置
}
}
temp=arr[index];
arr[index]=arr[i];
arr[i]=temp;
}
}
插入排序和选择排序可以对照来理解:插入排序把每个数据放到合适的位置
选择排序是给每个位置找到合适的元素
3.冒泡排序
原理:冒泡排序每一趟循环就是比较i和i+1这两个数,把较大的数放到后面,这样一趟下来最大的数就放到了最后
第二趟也是同理,不过每一趟都少遍历一个数,也就是上一趟确定的最大的那个数
这张图非常形象
public static void bubbleSort(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;
}
}
}
// System.out.println(Arrays.toString(arr));
}