排序算法---选择排序,冒泡排序,插入排序的分析跟优化

一直对算法很感兴趣,但是一直没时间深究,现在开始对算法进行一些探究,有不对的地方希望大家指正!

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循环),而且这个界是精确的

猜你喜欢

转载自blog.csdn.net/qq_41907991/article/details/81293156