程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 排序算法詳解(二)

排序算法詳解(二)

編輯:C++入門知識

前面說了排序算法中的插入排序,下面就來看下排序中的快速排序。

在快速排序中,最簡單的就是大家耳熟能詳的冒泡排序,那麼到底什麼是冒泡排序呢?冒泡排序的思想就是:首先將第一個元素與第二個元素進行比較,若未逆序,則將兩個元素的位置進行交換,然後繼續比較第二個和第三個元素之間的大小,依此類推,知道第n-1個元素和第n個元素比較完成了以後,第一趟冒泡排序就終止了,它將最大的元素安置到了序列的最後,然後在進行第二趟冒泡排序,對前n-1個元素進行冒泡排序,然後將最大值放入n-1的位置上,以此類推,逐趟進行序列的遍歷,而整個排序過程的結束就是在一趟排序中,沒有元素進行交換。

下面就是一個使用冒泡排序的一個小例子:

[cpp]
#include<stdio.h> 
#include<stdlib.h> 
 
#define N 100 
int L[N]; 
 
void Bubblesort(int n) 

    int i,j,t; 
    for(i=0;i<n;i++) 
    { 
        for(j=i;j<=n;j++) 
        { 
            if(L[j]>L[j+1]) 
            {   t = L[j+1]; 
                L[j+1] = L[j]; 
                L[j] = t; 
                continue; 
            } 
        } 
        break; 
    } 
    for(i=0;i<=n;i++) 
        printf("L[%d]=%d\n",i,L[i]); 

 
int main() 

    int i,n; 
    scanf("%d",&n); 
    for(i=0;i<=n;i++) 
        scanf("%d",&L[i]); 
    Bubblesort(n); 
    return 0; 

由上面可以明顯的看出,冒泡排序的時間復雜度是O(n2)。其是穩定的排序。
在快速排序中,冒泡排序是最簡單的一種排序,而快速排序是對冒泡排序的一種改進,其算法的基本思想是:通過一趟排序將序列分割成獨立的兩部分,其中一部分的元素比另一部分的元素小,然後將這兩部分序列再進行快速排序排序,以最終達到整個序列有序。快速排序比前面的冒泡排序理解起來稍微有點難度,下面看這個例子,以供大家深入的理解一下:

[cpp]
#include<stdio.h> 
#include<stdlib.h> 
 
#define N 100 
 
 
void Quicksort(int *arr,int StartPos,int EndPos) 

    int i,j,key; 
    key = arr[StartPos]; 
    i = StartPos; 
    j = EndPos; 
    while(i<j) 
    { 
        while(arr[j]>=key && i<j) 
            j--; 
        arr[i] = arr[j]; 
        while(arr[i]<=key && i<j) 
            i++; 
        arr[j] = arr[i]; 
    } 
    arr[i] = key; 
    if(i-1>StartPos) 
        Quicksort(arr,StartPos,i-1); 
    if(EndPos>i+1) 
        Quicksort(arr,i+1,EndPos); 

 
void Print(int *arr,int EndPos) 

    int i; 
    for(i=0;i<=EndPos;i++) 
        printf("L[%d]=%d\n",i,arr[i]); 

 
int main() 

    int i,n,L[N]; 
    scanf("%d",&n); 
    for(i=0;i<n;i++) 
        scanf("%d",&L[i]); 
    Quicksort(L,0,n-1); 
    Print(L,n-1); 

上面采用了遞歸的方法來進行快速排序。快速排序是不穩定的。
這部分主要講解的是快速排序,下面還將繼續進行其余排序方法的說明。


作者:wanchres

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved