冒泡排序,快速排序

冒泡排序:

   1) 实现的方式:重复地走访过要排序的元素列,依次比较两个相邻的元素,按照一个顺序交换(可以从大到小,也可以从小到大),直到元素列排序完成。

    2)名字的由来:因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”

    3)图解:

        

 

 

   4)算法分析:

        时间复杂度

        若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数和记录移动次数

      均达到最小值: 
       所以,冒泡排序最好的时间复杂度
 
      若初始文件是反序的,需要进行趟排序。每趟排序要进行次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: 
     
    
     冒泡排序的最坏时间复杂度为
     综上,因此冒泡排序总的平均时间复杂度为 
 

   算法稳定性

    冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;

    如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

 
 
 5)java的实现:
       public static void bubbleSort(int arr[]) {
 
        for(int i =0 ; i<arr.length-1 ; i++) { 
           
            for(int j=0 ; j<arr.length-1-i ; j++) {  
 
                if(arr[j]>arr[j+1]) {
                    int temp = arr[j];
                     
                    arr[j]=arr[j+1];
                     
                    arr[j+1]=temp;
                  }
            }    
        }
    }
 
参考:https://baike.baidu.com/item/冒泡排序/4602306
 
快速排序算法:
 
    1. 快速排序(Quicksort)是对冒泡排序的一种改进。
     2.由来:快速排序由C. A. R. Hoare在1960年提出。
        它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
 
java实现:
   public static int[] qsort(int arr[],int start,int end) {        
    int pivot = arr[start];        
    int i = start;        
    int j = end;        
    while (i<j) {            
        while ((i<j)&&(arr[j]>pivot)) {                
            j--;            
        }            
        while ((i<j)&&(arr[i]<pivot)) {                
            i++;            
        }            
        if ((arr[i]==arr[j])&&(i<j)) {                
            i++;            
        else {                
            int temp = arr[i];                
            arr[i] = arr[j];                
            arr[j] = temp;            
        }        
    }        
    if (i-1>start) arr=qsort(arr,start,i-1);        
    if (j+1<end) arr=qsort(arr,j+1,end);        
    return (arr);    
}    
 
public static void main(String[] args) {        
    int arr[] = new int[]{3,3,3,7,9,122344,4656,34,34,4656,5,6,7,8,9,343,57765,23,12321};        
    int len = arr.length-1;        
    arr=qsort(arr,0,len);        
    for (int i:arr) {            
        System.out.print(i+"\t");        
    }    
}
 
来源:https://baike.baidu.com/item/快速排序算法/369842?fr=kg_qa

 

posted @ 2020-07-21 16:14  小窝蜗  阅读(121)  评论(0编辑  收藏  举报