冒泡排序 选择排序 插入排序
排序
说明
简单的说一下几个排序,都是从左往右排序,从小到大,冒泡排序直接双重for循环,选择排序需要声明minIndex,快速排序需要声明num和j
1 冒泡排序
最基本的排序,牢记数组长度为N,则判断N>0后,使用双层for循环,外层i<N-1,内层j<N-1-i,如果数组[j]>数组[j+1],则交换位置
public static int[] bubbleSort(int[] array){
if (array.length>0){
for (int i=0;i<array.length-1;i++){
for (int j=0 ;j<array.length-1-i;j++){
if (array[j]>array[j+1]){
int temp = array[j+1];
array[j+1]=array[j];
array[j]=temp;
}
}
}
}
return array;
}
2 选择排序
最常用的排序,牢记数组长度为N,则判断N>0后,首先一层for循环,i<N,并且记录本次循环i对应的数组索引minIndex,默认其是当前位置向右看最小值的索引,即minIndex=i,然后第二层for循环,j从i开始,j<N,如果array[j]<array[minIndex]就记录j为最小值索引,即minIndex=j,内存循环结束后令array[i]与array[minIndex]交换位置
public static int[] selectSort(int[] array){
if (array.length>0){
for (int i=0 ;i<array.length;i++){
int minIndex=i;
for (int j=i;j<array.length;j++){
if (array[j]<array[minIndex])
{
minIndex=j;
}
}
int temp = array[i];
array[i]=array[minIndex];
array[minIndex]=temp;
}
}
return array;
}
3 插入排序
将整个队列看成两个区域,左边是排好的,右边是待排的,牢记数组长度为N,令i从索引1开始,不断从待排区域取值,因此i<N,每次取值时记录该值num=array[i],再声明j,令j=i-1,不断从i-1开始往左取数组的值,因此j≥0并且j--,当num<array[j]时,将排好的值往右移一个位置,这会让array[i]被覆盖,但是这个值已经被num存好,当发现array[j]<num,说明array[j+1]就是num要存放的位置,此时直接break跳出循环
public static int[] insertSort(int[] array){
if (array.length>0){
for (int i=1;i<array.length;i++){
int num = array[i];
int j;
for (j = i-1;j>=0;j--){
if (num<array[j]){
array[j+1]=array[j];
}else{
break;
}
}
array[j+1]=num;
}
}
return array;
}