冒泡排序&快速排序

1.排序分为以下四类共七种排序方法:

  交换排序

  1) 冒泡排序 
  2) 快速排序

  选择排序:

  3) 直接选择排序 
  4) 堆排序

  插入排序:

  5) 直接插入排序 
  6) 希尔排序

  合并排序:

  7) 合并排序

2.冒泡排序

  时间复杂度O(n2)

  其基本思想是:通过相邻元素之间的比较和交换,使关键字较小的元素逐渐从底部移向顶部,就像水底下的气泡一样逐渐向上冒泡.

public class BubbleSort {
	
	public static void bubbleSort(int [] arr){
		if(arr==null||arr.length==0){
			return;
		}
		for(int i=0;i<arr.length-1;i++){
			for(int j=arr.length-1;j>i;j--){//从后向前冒泡,把小的元素冒到前面去
				if(arr[j]<arr[j-1]){
					swap(arr,j-1,j);
				}
			}
		}
	}
	
	public static void swap(int [] arr,int m,int n){
			int temp=arr[m];
			arr[m]=arr[n];
			arr[n]=temp;
	}
    public static void main(String[] args) {
        int [] arr=new int[9];
        arr[0]=9;
        arr[1]=1;
        arr[2]=5;
        arr[3]=8;
        arr[4]=3;
        arr[5]=7;
        arr[6]=4;
        arr[7]=6;
        arr[8]=2;

        System.out.print("[");
        for (int num : arr) {
            System.out.print(num+" ");
        }
        System.out.print("]");
        System.out.println();

        BubbleSort.bubbleSort(arr);
        System.out.print("[");
        for (int num : arr) {
            System.out.print(num+" ");
        }
        System.out.print("]");
        System.out.println();

    }
}

  3.快速排序

  快速排序是不稳定的,其时间平均时间复杂度是O(nlgn)。

  快速排序的思想:冒泡+二分+递归分治

   什么叫递归分治?

  基本思想就是:将原问题分解为若干个规模更小的但结构与原问题相似的子问题,递归地解决这些子问题,然后将这些子问题的解组合为原问题的解。

  

public class Test{
	//划分
	public static int Division(int[] arr,int left,int right){
		int base=arr[left]; //把左边的第一个数作为基准
		while(left<right){
			while(left<right && arr[right]>base)
				--right; //从右向左遍历找第一个比基准小的元素
			arr[left]=arr[right]; //找到之后就把左边和右边互换一下
			
			while(left<right && arr[left]<base)
				++left; //从左向右遍历找第一个比基准元素小的元素
			arr[right]=arr[left]; //找到之后,把刚才从右向左遍历得到的arr[left]和现在的arr[right]互换
		}
		arr[left]=base;
		return left;
	}
	public static void QuickSort(int[] arr,int left,int right){
		int i;
		if(left<right){
			i=Division(arr,left,right); //分割
			QuickSort(arr,left,i-1); //将两部分分别排序
			QuickSort(arr,i+1,right);
		}
	}
	public static void main(String[] args){
		int[] arr={4,2,1,6,0,-5,1};
		int i;
		QuickSort(arr,0,arr.length-1);
		for(i=0;i<7;i++)
			System.out.print(arr[i]);
	}
}

 栗子:线性表的长度为10,在最坏情况下,冒泡排序需要比较次数为(45)

  最坏的情况即是每个元素两两都要相比较

  所以应该是9+8+7...+1=45

  

原文地址:https://www.cnblogs.com/GumpYan/p/5757267.html