zoukankan      html  css  js  c++  java
  • 算法导论--第七章、快速排序

    1. 快速排序描述:

    基于分治模式,分为分解、解决和合并三部分;

    1)分解:

    将数组A[p..r]划分为两个子数组A[p..q-1]和A[q+1..r],是的A[p..q-1]中每个元素都小于或等于A(q)

    2)解决:

    通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]排序

    3)合并:

    合并两个有序的数组,A[p..r]

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 #define MaxSize 8
     5 
     6 int Partition(int A[], int p, int r){
     7     int x = A[r];//将A[]中最后一个元素作为主元,基准 
     8     int i = p - 1;
     9     int j;
    10     int tmp;
    11     
    12     //通过for(){...}划分数组,因为最后一个元素是主元,所以j < (r - 1 )
    13     for(j = p; j < r; j++){
    14         if(A[j] <= x){//元素比主元小,放到前面,并将两个元素交换位置,i <= j 
    15             i = i + 1;
    16             
    17             tmp = A[i];
    18             A[i] = A[j];
    19             A[j] = tmp;
    20     //        printf("
    Swaped: A[%d]: %d, A[%d]: %d
    ", i, j, A[i], A[j]);
    21         }
    22     }
    23     //将主元置于小于和大于两部分之间 
    24     tmp = A[i + 1];
    25     A[i + 1] = A[r];
    26     A[r] = tmp;
    27     
    28     return (i + 1);
    29 }
    30 
    31 void QuickSort(int A[], int p, int r){
    32     if(p < r){
    33         int q;
    34         
    35         q = Partition(A, p, r);
    36         QuickSort(A, p, q - 1);
    37         QuickSort(A, q + 1, r);
    38     }
    39 }
    40 
    41 int main(){
    42     int A[MaxSize] = {2, 1, 1, 1, 3, 5, 6, 4};
    43     int i;
    44     
    45     printf("A[]...
    ");
    46     for(i = 0; i < MaxSize; i++){
    47         printf("%d ", A[i]);
    48     }
    49     
    50     QuickSort(A, 0, (MaxSize - 1));
    51     
    52     printf("
    sorted A[]...
    ");
    53     for(i = 0; i < MaxSize; i++){
    54         printf("%d ", A[i]);
    55     }
    56     printf("
    ");
    57         
    58     system("pause");
    59     return 0;
    60 }
  • 相关阅读:
    示例页面
    HDU2149Public Sale(Bash 博弈)
    留言板
    HDU2188Bash博弈
    win7系统激活工具
    HDU1849Rabbit and Grass(Nimm博弈)
    HDU1846Brave Game(巴什博弈)
    drools原生drl规则文件的使用
    Vue element table动态生成列
    eltable动态生成列重点
  • 原文地址:https://www.cnblogs.com/syd192/p/4424505.html
Copyright © 2011-2022 走看看