一直对算法很感兴趣,但是一直没时间深究,现在开始对算法进行一些探究,有不对的地方希望大家指正!
1.选择排序
代码如下:
//定义一个方法给数组排序 选择排序
public static void selecetArr(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[y]<arr[x]){
int temp;
temp=arr[y];
arr[y]=arr[x];
arr[x]=temp;
}
}
}
}
2.冒泡排序
//定义一个方法给数组排序 冒泡排序
public static void bubbleArr(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-1-x;y++){
if(arr[y]>arr[y+1]){
int temp;
temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
3.上面两种排序原理都很简单,就不做过多分析了,对算法稍有了解对这两种排序方式应该都很熟悉了,但是上面两种算法在排
序过程中,会有很多不必要的换位,现在进行优化,后面的算法会用到这种思想,所以先单独提出来,用变量暂时存储,相当与
一个备忘录
//定义一个方法给数组排序,减少换位次数,优化排序
//定义两个变量去接收每次比较得到的最小值跟最小值角标,最后进行一次换位
public static void youhuaArr(int[] arr){
for(int x=0;x<arr.length-1;x++){
int index=x;
int min=arr[x];
for(int y=x+1;y<arr.length;y++){
if(min>arr[y]){
index=y;
min=arr[y];
}
}
int temp;
temp=arr[index];
arr[index]=arr[x];
arr[x]=temp;
}
}
4.插入排序
public void insertionSort(int[] array) {
int j;
for (int p = 1; p < array.length; p++) {
int temp = array[p];
for (j = p; j > 0 && temp < array[j - 1]; j--) {
array[j] = array[j - 1];
}
array[j] = temp;
}
}
上述三种算法很明显时间复杂度为O(N*N)(两层for循环),而且这个界是精确的