zoukankan      html  css  js  c++  java
  • 手写快速排序(QuickSort)

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 
     5 using namespace std;
     6 
     7 int partition(int *a,int left,int right)
     8 {
     9     a[0] = a[left];  //设置a[left]为主键值,存于a[0],即以a[left]值将[left,right]区间一分为二
    10     while(left<right)
    11     {
    12         while(left<right&&a[right]>=a[0]) right--;  //从右边开始找到比主键值a[0]小的值,移到左边
    13         a[left]=a[right];
    14         while(left<right&&a[left]<=a[0]) left++;    //从左边开始找到比主键值a[0]大的值,移到右边
    15         a[right]=a[left];
    16     }
    17     a[left] = a[0];  //跳出while循环后的left==right,此时,区间已经一分为二了,将a[left]的值还原
    18     return left;
    19 }
    20 
    21 void QuickSort(int *a,int left,int right)
    22 {
    23     if(left<right)  //快拍区间要大于1
    24     {
    25         int mid = partition(a,left,right);  //进行一次划分,以a[left]划分区间为左右两个区间
    26         QuickSort(a,left,mid-1);   //对左区间进行进一步划分
    27         QuickSort(a,mid+1,right);  //对左区间进行进一步划分
    28     }
    29 }
    30 
    31 int main()
    32 {
    33     int n;
    34     int a[10000];
    35     while(~scanf("%d",&n))
    36     {
    37         int i;
    38         for(i=1;i<=n;i++)
    39         {
    40             scanf("%d",a+i);
    41         }
    42         QuickSort(a,1,n);
    43         for(i=1;i<=n;i++)
    44         {
    45             printf("%d ",a[i]);
    46         }
    47         putchar(10);
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    Multidimensional Arrays
    TortoiseGit
    Excel教程(14)
    Excel教程(13)
    Excel教程(12)
    Excel教程(11)
    lock
    reflect
    game
    html x
  • 原文地址:https://www.cnblogs.com/crazyapple/p/3240972.html
Copyright © 2011-2022 走看看