zoukankan      html  css  js  c++  java
  • 快速排序算法记录

    快速排序不是一种稳定的排序算法
     
    设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
    1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
    2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
    3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
    4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
    5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
     
    main.cpp:
      1 #include <iostream>
      2 #include <cstdlib>
      3 
      4 using namespace std;
      5 
      6 #define N 100
      7 
      8 void Upsort(int a[], int left, int right)
      9 {
     10     if (left >= right)
     11     {
     12         return;
     13     }
     14 
     15     int i = left;
     16     int j = right;
     17     int key = a[left];
     18 
     19     while(i < j)
     20     {
     21         while(i<j && key <= a[j])
     22         {
     23             j--;
     24         }
     25 
     26         a[i] = a[j];
     27 
     28         while (i<j && key >= a[i])
     29         {
     30             i++;
     31         }
     32 
     33         a[j] = a[i];    
     34     }
     35 
     36     a[i] = key;
     37 
     38     Upsort(a,left,i-1);
     39     Upsort(a,i+1,right);
     40 }
     41 
     42 void Downsort(int a[], int left, int right)
     43 {
     44     if (left >= right)
     45     {
     46         return;
     47     }
     48 
     49     int i = left;
     50     int j = right;
     51     int key = a[right];
     52 
     53     while(i < j)
     54     {
     55         while (i<j && key <= a[i])
     56         {
     57             i++;
     58         }
     59 
     60         a[j] = a[i];
     61 
     62         while(i<j && key >= a[j])
     63         {
     64             j--;
     65         }
     66 
     67         a[i] = a[j];    
     68     }
     69 
     70     a[j] = key;
     71     
     72     Downsort(a,left,j-1);
     73     Downsort(a,j+1,right);
     74 }
     75 
     76 void UpDownsort(int a[], int left, int right, bool Up)
     77 {
     78     if (Up)
     79     {
     80         Upsort(a,left,right);
     81     }
     82     else
     83     {
     84         Downsort(a,left,right);
     85     }
     86 }
     87 
     88 int main()
     89 {
     90     int a[N];
     91     for(int i = 0; i<N; i++)
     92     {
     93         a[i] = rand();
     94     }
     95     
     96     UpDownsort(a,0,N-1,false);
     97 
     98     for(int i=0; i<N; i++)
     99     {
    100         cout<<a[i]<<"	";
    101     }
    102     
    103     return 0;
    104 }
  • 相关阅读:
    Object-C,NSSet,不可变集合
    NYIST 860 又见01背包
    NYIST 1070 诡异的电梯【Ⅰ】
    HDU 1542 Atlantis
    HDU 4756 Install Air Conditioning
    CodeForces 362E Petya and Pipes
    HDU 4751 Divide Groups
    HDU 3081 Marriage Match II
    UVA 11404 Palindromic Subsequence
    UVALIVE 4256 Salesmen
  • 原文地址:https://www.cnblogs.com/Jace-Lee/p/6026536.html
Copyright © 2011-2022 走看看