当前位置:编程学习 > 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
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,