快速排序非遞迴實現

2021-07-08 10:49:24 字數 2004 閱讀 1827

再來談談快速排序,遞迴實現與非遞迴實現。

遞迴實現是基本的排序;非遞迴實現需要用stack來儲存 (low, high)的排序對,一部分一部分的排序。

直接上程式了:

標頭檔案 quick_test.h

#include 

#include

#include

#include

/#include

#include

typedef

struct region region;

/////#define n 100000000

#define n 15

//#define m 1000000000

#define m 1000

typedef

long data;

void swpdata(data &data1, data &data2);

void quicksort(data *arr, long low, long high);

long partition(data *arr, long low, long high);

void quicksortnew(data *arr, long low, long high);

簡單的排序主函式,quick_test.cpp

#include "quick_test.h"

void swpdata(data &data1, data &data2)

void quicksort(data *arr, long low, long high)

long partition(data *arr, long low, long high)

arr[i] = num;

return i;

}void quicksortnew(data *arr, long low, long high)

if(ind + 1

< j && ind != -1)

}}int main(int argc, char *argv)

srand( (unsigned)time(null) );

data num = 0;

data *arr = new data[n]; //attention

long i = 0;

file *fp;

fp = fopen(argv[1], "wb");

if(null == fp)

for(i = 0; i < n; ++ i)

fclose(fp);

/////////

//////

//////

//////

//////

//////

////////

//quicksort(arr, 0, n - 1);

quicksortnew(arr, 0, n - 1);

/////////

//////

//////

//////

//////

//////

////////

char line[10240];

snprintf(line, 10240, "%s.sort", argv[1]);

fp = fopen(line, "wb");

if(null == fp)

for(i = 0; i < n; ++ i)

fprintf(fp, "%ld\n", arr[i]);

delete arr; //attention

return

0;}

這裡值得一提的是,堆與棧空間的分配問題,定義的變數在棧空間,棧空間對資料的大小有很大的限制,最大到十萬級,當直接分配百萬級的空間,程式在執行時會出core,然而用堆就可以實現百萬千萬的空間分配。

堆空間分配變數,new與delete,現在明白堆空間的方便與靈活之處了,也就是**中標示 attention之處

快速排序實現(遞迴 非遞迴)

首先是劃分演算法,假設每次都以第乙個元素作為樞軸值,進行一趟劃分 int partition int a,int low,int high a low pivot 將樞軸值元素置於最終位置 return low 第乙個while迴圈裡的 還可以採用如下形式 while low high a high...

快速排序的非遞迴實現

首先說明一下快速排序是對氣泡排序的改進。為什麼這麼說呢?想一下氣泡排序,它把序列分成了兩部分,前半部分無序,後半部分公升序排列,並且後半部分的數都大於前半部的數。由此可得到快速排序和氣泡排序的一些共同點 都要經歷n趟排序 每趟排序要經歷o n 次比較 都是後半部分元素比前半部大 而不同之處就在於氣泡...

快速排序的非遞迴實現

首先說明一下快速排序是對氣泡排序的改進。為什麼這麼說呢?想一下氣泡排序,它把序列分成了兩部分,前半部分無序,後半部分公升序排列,並且後半部分的數都大於前半部的數。由此可得到快速排序和氣泡排序的一些共同點 都要經歷n趟排序 每趟排序要經歷o n 次比較 都是後半部分元素比前半部大 而不同之處就在於氣泡...