美文网首页
快速排序(双向)

快速排序(双向)

作者: 希崽家的小哲 | 来源:发表于2015-05-22 10:00 被阅读102次
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<set>
#include<cmath>
#include<cassert>
#include<cstring>
#include<iomanip>
using namespace std;
#define FOR(i,a,b)      for( int i = (a) ; i <= (b) ; i ++)
#define FF(i,a)        for( int i = 0 ; i < (a) ; i ++)
#define FFD(i,a,b)      for( int i = (a) ; i >= (b) ; i --)
#define S64(a)          scanf(in64,&a)
#define sf(a)           scanf("%d",&a)
#define LL(a)           ((a)<<1)
#define RR(a)           (((a)<<1)+1)
#define PB              push_back
#define PF              push_front
#define X               first
#define Y               second
#define CL(Q)           while(!Q.empty())Q.pop()
#define MM(name,what)   memset(name,what,sizeof(name))
#define MC(a,b)         memcpy(a,b,sizeof(b))
#define MAX(a,b)        ((a)>(b)?(a):(b))
#define MIN(a,b)        ((a)<(b)?(a):(b))
#define read            freopen("in.txt","r",stdin)
#define write           freopen("out.txt","w",stdout)



#define MAX_SIZE 10000+1
int num[MAX_SIZE];
int temp[MAX_SIZE];

int partion(int num[],int left,int right)
{
    int i,j,index;
    index = num[left];
    i=left;
    j=right;
    while (i<j) // 双向扫描算法
    {
        while(num[i]<=index&&i<right)
            i++;
        
        while(num[j]>=index&&j>left)
            j--;
        
        if(i>=j)break;
        swap(num[i],num[j]);
    }
    
    swap(num[left],num[j]);// 从小到大排序注意是 交换 j 和 index 位置!
    
    return j;
}
void quick_sort(int num[],int lo,int hi)
{
    if (lo<hi)
    {
        int x = partion(num,lo,hi);
        quick_sort(num,lo,x-1);
        quick_sort(num,x+1,hi);
        
    }
}
int main()
{

    int i;
    
    int num[] {6,1,2,5,9,10,11};
        quick_sort(num,0,6);
        for(i=0;i<6;i++)
            printf("%d\n",num[i]);
    
    return 0;
}

相关文章

  • 双向链表的快速排序(swift版本)

    面试经常会被问到的单向链表的快速排序or双向链表的快速排序,现在用swift写了一个双向链表的快速排序,直接上代码...

  • 快速排序(双向)

  • JavaScript:十大排序的算法思路和代码实现

    本文内容包括:(双向)冒泡排序、选择排序、插入排序、快速排序(填坑和交换)、归并排序、桶排序、基数排序、计数排序(...

  • 各排序算法的简单对比

    直接插入 折半插入 希尔排序 快排 双向冒泡 简单选择排序 归并排序 堆排序 希尔排序出人意料,利用随机枢值的快速...

  • 快速排序的递归和非递归实现

    排序算法中很重要的快速排序 递归实现方式 递归实现方式的不同在于分区函数的不同 双向循环指针式,原理是利用左右指针...

  • 将二叉搜索树转化为排序的双向链表

    题目 将二叉搜索树转化为排序的双向链表 例如,下图二叉搜索树转换为图中的排序的双向链表。 解析 转换为排序的双向链...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 面试准备--排序

    堆排序 快速排序(simple) 快速排序(regular) 归并排序 Shell排序 插入排序 选择排序 冒泡排序

  • 排序

    插入排序 选择排序 冒泡排序 归并排序 快速排序* 三路快速排序

  • 算法笔记01-排序#2

    快速排序敢叫快速排序,那它一定得快。 快速排序 概述 快速排序也是分治排序的典型,它快,而且是原地排序。不过,要防...

网友评论

      本文标题:快速排序(双向)

      本文链接:https://www.haomeiwen.com/subject/jonlqttx.html