算法(2)-比较排序-冒泡-插入-选择-java实例源码

冒泡、插入、选择是三种基本的比较排序算法,时间复杂度基本是O(n^2).

冒泡
     //冒泡:O(n^2) 值 排序 空间也是O(1) 稳定
     //1.   5位置OK  操作N-1次 两两比较 大的交换位置   一次遍历得一个最大值
     //2.   4位置OK  操作N-2
    //3.    3位置OK  操作N-3
    //4.    2位置OK  操作N-4
    //5.    1位置OK  操作N-5
    / /大循环--
     //循环 每次只两两比较 每次得一个值
    //n+(n-1)+(n-2)+(n-3)+....+1

public static void bubbleSort(int[] arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		for (int e = arr.length - 1; e > 0; e--) {
			for (int i = 0; i < e; i++) {
				if (arr[i] > arr[i + 1]) {
					swap(arr, i, i + 1);
				}
			}
		}
	}

/*
C++
  int a[10] = {0,1,2,3,4,5,6,7,8,9};
  int length = sizeof(a)/sizeof(a[0]);
*/


插入
 

 //4,3,1,2,5,0
// 0-0 0-1 0-2 0-3... 大循环 每次从0开始
//小循环,从右到左,从后往前 j j+1为操作数 两两比较
public static void insertionSort(int[]arr)
{
    if(arr==null||arr.length<2)
    {
        return;
    }
    for(int i=1;i<arr.length;i++)//大循环 0-i
    {
        //0-0 是否有序 是,不用操作 位置 从后向前
        //0-1   位置 先看1 再看0位置
        //0-2     先看2
        //0-3
        //0-4
        //0-5
       //终止条件:1.不比前数小
               //2.没有数
        //一路向做换 永远处理的是j+1
        for(int j=i-1;j>=0&&arr[j]>arr[j+1];j--)
        {
            swap(arr,j,j+1);
        }
    }
    
}



选择
 

// 选择排序 取最小值 两次遍历  先搞定的是0位置,从左到右++
//看了N个数选最小值,
//O-n-1 选个最小值(里面的循环)  放0位置(外面的循环 ++ i是下标) 
//1-n-1选个最小值  记录在minIndex 放1位置 
//2-n-1选个最小值  放2位置 
//3-n-1选个最小值  放3位置 
//4-n-1选个最小值  放4位置

//大循环是范围 i是下标 ++
//小循环:范围内找最小值 ,与前面找到的最小数比较 minIndex记录上
//        范围越来越小。
//1-2 比较 取最小值index
//2-3
//3-4

public static void selectionSort(int[]arr)
{
    if(arr==null||arr.length<2)
    {
        return;
    }
    for(int i=0;i<arr.length-1;i++)//i~n-1
    {
        int minIndex=i;
        for(int j=i+1;j<arr.length;j++)//
        {
            minIndex=arr[j]<arr[minIndex]?j:minIndex;//如果arr[j]<arr[minIndex] 返回j
        }
        swap(arr,i,minIndex);// 交换 i,minIndex
    }
}
swap(int arr[],int a,int b)
{
    arr[a]=arr[a]^arr[b];
    arr[b]=arr[a]^arr[b];
    arr[a]=arr[a]^arr[b];
    
}


 


 

posted @ 2020-02-06 10:15  jasmineTang  阅读(61)  评论(0)    收藏  举报