快速排序3——非递归实现

/*
 * Copyright 2014 YU Heng-yang. All rights reserved.
 *
 * quick_sort_nonrecursive.c - Non-recursive quick sort implementation.
 *
 * Modify MAX_DEPTH to a larger number if large
 *  input is expected.
 *
 * 2014-7-8 YU Heng-yang. 
 */
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "common.h"
	
void quick_sort(int *arr, int n);
	
int main(int argc, char *argv[])
{
        int *array, n;
	
        n = input(&array);
        quick_sort(array, n);
        output(array, n);
	
        return 0;
}
	
#define MAX_DEPTH 1000
	
struct Interval {
        int *base;
        int n;
} stack[MAX_DEPTH + 1];
	
int top = -1;
	
void push(int *base, int n)
{
        assert(top < MAX_DEPTH + 1);
        stack[++top].base = base;
        stack[top].n = n;
}
	
void pop(int **base, int *n)
{
        assert(top > -1);
        *base = stack[top].base;
        *n = stack[top--].n;
}
	
void quick_sort(int *arr, int n)
{
        int i, j, *base, k;
	
        push(arr, n);
        while (top != -1) {
                pop(&base, &k);
                if (k < 2)
                        continue;
                i = 0;
                j = k;
                do {
                        /* choose base[0] as the pivot is not very good */
                        do ++i; while (i < j && base[i] < base[0]);
                        do --j; while (base[j] > base[0]);
                        if (i < j)
                                swap(base, i, j);
                } while (i < j);
	
                swap(base, 0, j);
                push(base, j); /* quick_sort(base, j); */
                push(base + j + 1, k - j - 1); /* quick_sort(base+j+1, n-j-1); */
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值