zoukankan      html  css  js  c++  java
  • 快速排序

    快速排序基本思想:

    1. 分解:将输入的序列array[m,....,n]划分成两个非空子序列array[m,....,k]和array[k+1,....,n],使得array[m,....,k]中的任一元素的值不大于和array[k+1,....,n]中的任一元素的值。

    2. 递归求解:通过递归调用快速排序算法分别对array[m,....,k]和array[k+1,....,n]进行排序。

    3.合并:由于对分解出的两个子序列的排序是就地进行的,所以在array[m,....,k]和array[k+1,....,n]都排好后,不需要执行任何计算array[m,.....,n]就已经排好了。

               

    #include <iostream>
    #include <algorithm>
    #include "string.h"
    #include "stdio.h"
    #include <vector>
    #include <deque>
    #include<stack>
    using namespace std;
    
    class Sort {
    public:
        int* quickSort(int* A, int n) {
            _quicksort(A,0,n-1);
            return A;
        }
        void _quicksort(int *A,int left,int right)
        {
            if(left>=right)
                return;
            int partition = Partition(A,left,right);
            _quicksort(A,left,partition-1);//注意这里的边界条件:partition-1
            _quicksort(A,partition+1,right);
        }
        int Partition(int* A,int left,int right)
        {
            int key = A[left];//取第一个元素作为支点,使得比它小的都在它左边,比它大的都在它右边。
            int j = left;//始终指向最后一个比key小的最后一个元素
            for(int i=left+1;i<=right;i++)
            {
                if(A[i]<key)
                {
                    swap(A[j+1],A[i]);
                    j++;
                }
            }
            swap(A[left],A[j]);//j指向最后一个比key小的最后一个元素,将支点和A[j]交换,就实现了左边元素都比他小,右边元素都比他大
               return j;//返回支点的位置
        }
    };
    int main()
    {
        int array[]={3,4,5,1,2,8,7};
        Sort sort;
        int len = sizeof(array)/sizeof(array[0]);
        int* arr = sort.quickSort(array,len);
        for(int i=0;i<len;i++)
        {
            cout<<arr[i]<<" ";
        }
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    Javascript 之 存储
    Javascript 之 跨域
    Javascript 之 Ajax
    Javascript 之 事件
    流程控制语句
    JS属性操作
    JS效果的步骤
    遍历Map的四种方法
    自动删除ftp自动保存的密码
    IE6下png格式透明图片显示灰色的解决办法.
  • 原文地址:https://www.cnblogs.com/omelet/p/6598961.html
Copyright © 2011-2022 走看看