直接插入算法:时间复杂度O(n^2)
import java.util.*;
public class DigPow {
public static void main(String[] args){
// Insert brilliant code here
//插入排序
int[] a=new int[]{3,1,5,7,2,4,9,6};
for(int i=1;i<a.length;i++) {
if(a[i]<a[i-1])
{
int temp=a[i];
int j=i-1;
while(j>=0&&a[j]>temp){ //注意此处一定是j>=0在前,不然会报数组溢出的问题
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
System.out.println(Arrays.toString(a));
}
System.out.println(Arrays.toString(a));
}
}
希尔排序:时间复杂度:O(nlogn)
import java.util.*;
public class DigPow {
public static void main(String[] args){
// Insert brilliant code here
//希尔排序
int[] arrays=new int[]{26, 53, 67, 48, 57, 13, 48,13, 32, 60, 50};
int incrementNum = arrays.length/2;
while(incrementNum >0){
for(int i=0;i<arrays.length;i++){
//进行插入排序
if(arrays[i]>arrays[i+incrementNum]){
int temple = arrays[i];
arrays[i] = arrays[i+incrementNum];
arrays[i+incrementNum] = temple;
}
}
//设置新的增量
incrementNum = incrementNum/2;
}
System.out.println(Arrays.toString(arrays));
}
}
选择排序 时间复杂度:O(n^2);
import java.util.*;
public class DigPow {
public static void main(String[] args){
// Insert brilliant code here
//选择排序
int[] a=new int[]{49,38,65,97,76,13,27,14,10};
for(int i=0;i<a.length;i++)
{
int min=i;
for(int j=i;j<a.length;j++)
{
if(a[min]>a[j]) //注意这里一定要换为min,因为后文中会对min进行替换。
{
min=j;
}
}
if(i!=min)
{
int temp=a[min];
a[min]=a[i];
a[i]=temp;
}
System.out.println(Arrays.toString(a));
}
System.out.println(Arrays.toString(a));
}
}
选择排序的优化:可以一趟确定出两个值:最大以及最小:
冒泡排序:时间复杂度: