算法
本文先介绍最基础排序算法 ,最容易理解最好实现,冒泡、选择、插入,实现方式双层循环,时间复杂度全部O(n2)
冒泡排序
冒泡排序,从乱序数组一测开始,依次比较相邻元素,直至尾部,每次可选择将最大或最小元素移动至数组一侧
实现代码
public static void demo01(int[] i){
for (int i1 = 0; i1 < i.length-1; i1++) {
int temp;
for (int i2 = i1+1; i2 < i.length; i2++) {
if(i[i2]<i[i1]){
temp = i[i1];
i[i1] = i[i2];
i[i2] = temp;
}
}
}
}
选择排序
选择排序,使用额外变量temp,从待排序数组一侧循环至尾,每次将本次循环的最小或最大值赋值给temp、每次循环完毕将temp与未排序数组的第一位元素交换位置
public static void demo02Test(int[] i){
for (int i1 = 0; i1 < i.length; i1++) {
int min = i[i1];
int temp=i1;
for (int i2 = i1; i2 < i.length; i2++) {
if(i[i2]<min){
min = i[i2];
temp = i2;
}
}
i[temp] = i[i1];
i[i1] = min;
}
}
直接插入排序
直接插入排序,该算法假设有一个已排序好的有序数组,依次将元素插入该有序数组的合理位置来达到排序效果,例如第一次循环时,会把数组中第一个元素当成一个已排序好的数组,拿第二个元素插入该已排序数组中,也就是第二个元素比第一个元素大时,则放在后面,否则交换位置,以此类推
public static int[] demo03Test(int[] i ){
for (int i1 = 1; i1 < i.length; i1++) {
int cur = i[i1];
int tar = i1;
for(int j = i1;j>0;j--){
if(i[j]<i[j-1]){
i[j] = i[j-1];
i[j-1] = cur;
}
}
}
return i;
}