标题:自己做了个快速排序,不知道方法究竟对不对,大家来看看。。。
只看楼主
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
 问题点数:0 回复次数:0 
自己做了个快速排序,不知道方法究竟对不对,大家来看看。。。

根据网上查的一些有关快速排序原理的文章做的,不知道这样是不是正确。。。 #include <iostream> #include <iomanip>

using namespace std;

const int block_size = 12; const int PRINT_WIDTH = 4;

//交换两个元素 void swap(double &a,double &b); //指定区间内的插入排序 void ins_sort(double *dArrayObj,long id_begin,long id_end);

//分割函数 long partition(double *dArrayObj,long id_begin,long id_end); //快速排序主函数 void qsort(double *dArrayObj,long id_begin,long id_end);

//打印数组 void print_array(double *dArrayObj,long size);

int main() { //测试驱动 double n_queue[] = {5,1,17,6,43,20,9,65,10,22,12,64,39,70,3,54,98,192,184}; cout << "Before sort :" << endl; print_array(n_queue,19); qsort(n_queue,0,18); cout << "After sort :" << endl; print_array(n_queue,19); return 0; }

void swap(double &a,double &b) { double temp; temp = a; a = b; b = temp; }

void ins_sort(double *dArrayObj,long id_begin,long id_end) { double poster; //临时哨 long i,j; for(i = id_begin + 1; i <= id_end; i++) { poster = dArrayObj[i]; j = i - 1; while(dArrayObj[j] > poster) { dArrayObj[j+1] = dArrayObj[j]; j--; if(j < 0) break; } dArrayObj[j+1] = poster; } }

long partition(double *dArrayObj,long id_begin,long id_end) { double base_value = dArrayObj[id_begin]; long base_position = id_begin;

long i; for(i = id_begin + 1; i <= id_end; i++) { if(dArrayObj[i] < base_value) { if(i == base_position + 1) { swap(dArrayObj[base_position],dArrayObj[i]); base_position++; } else if(i > base_position + 1) { swap(dArrayObj[base_position],dArrayObj[base_position+1]); swap(dArrayObj[base_position],dArrayObj[i]); base_position++; } } }

return base_position; }

void qsort(double *dArrayObj,long id_begin,long id_end) { if(id_end - id_begin + 1 <= block_size) { ins_sort(dArrayObj,id_begin,id_end); } else { long p_point = partition(dArrayObj,id_begin,id_end);

//递归调用 qsort(dArrayObj,id_begin,p_point); qsort(dArrayObj,p_point+1,id_end); } }

void print_array(double *dArrayObj,long size) { long i; for(i = 0; i < size; i++) cout << setw(PRINT_WIDTH) << dArrayObj[i]; cout << endl; }

搜索更多相关主题的帖子: long double void begin dArrayObj 
2005-02-18 17:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-12301-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016478 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved