java数据结构和算法1



对于数组常用的就是排序算法:冒泡排序,选择排序,插入排序

冒泡排序


先理解后编程:9个数,外层需要8轮排序,内层每次都是从a[0]和a[1]比较开始,也就是相邻的两个比较。内层排序的轮数和外层的数字相关。

public static int[] sort(int[] arrays){
for(int i=0;i<arrays.length-1;i++){
for(int j=0;j<arrays.length-i-1;j++){
if(arrays[j]>arrays[j+1]){
int temp=arrays[j];
arrays[j]=arrays[j+1];
arrays[j+1]=temp;
}
}
}
return arrays;

}

冒泡排序运行都需要 O(N2) 时间级别。

其实无论何时,只要看见一个循环嵌套在另一个循环中,我们都可以怀疑这个算法的运行时间为 O(N2)级,外层循环执行 N 次,内层循环对每一次外层循环都执行N次(或者几分之N次)。这就意味着大约需要执行N2次某个基本操作。


选择排序:

选择排序是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。


9个数共需要8轮选择最小数,内层循环每轮从i+1开始,最后一个数结束,寻找最小值的下标

public static int[] chooseSort(int[] arrays){
for(int i=0;i<arrays.length-1;i++){
int min=i;
//拿到本轮中最小数的下表
for(int j=i+1;j<arrays.length;j++){
if(arrays[min]>arrays[j]){
min=j;
}
}
if(i!=min){
int temp=arrays[i];
arrays[i]=arrays[min];
arrays[min]=temp;
}
}
return arrays;

}


但是由于选择排序交换的次数少,所以选择排序无疑是比冒泡排序快的。


插入排序:



public static int[] insertSort(int[] arrays){
int j;
for(int i=1;i<arrays.length;i++){
int tmp=arrays[i];
j=i;
while(j > 0 && tmp < arrays[j-1]){//从已经排序的序列最右边的开始比较,找到比其小的数
                arrays[j] = arrays[j-1];//向后挪动
                j--;
            }
            arrays[j] = tmp;//存在比其小的数,插入
}
return arrays;
}

猜你喜欢

转载自blog.csdn.net/weixin_40839342/article/details/80840034