我的C语言快速排序方法
2008-10-20 18:28
225 查看
// test0.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <algorithm>
#include <iterator>
//随机选取中间数
template<typename T>
int select(T data[], int low, int high)
{
int middle=low+rand()%(high-low);
std::swap(data[middle], data[low]);
int i=low+1;
int j=high;
while ( i<=j )
{
while ( data[i]<data[low] )
++i;
while ( data[low]<data[j] )
--j;
if (i<j)
{
std::swap(data[i], data[j]);
++i;
--j;
}
else
++i;
}
std::swap(data[low], data[j]);
return j;
}
//快速排序函数
template <typename T>
void QuickSorter (T data[], int low, int high)
{
if ( low<high )
{
int n=select(data, low, high);
QuickSorter(data, low, n-1);
QuickSorter(data, n+1, high);
}
}
//快速排序包装器
template <typename T>
void QuickSort(T data[], int size)
{
srand(time(NULL));
QuickSorter(data, 0, size-1);
}
//测试例程
int _tmain(int argc, _TCHAR* argv[])
{
int data[10000];
for ( int i=0; i<10000; ++i )
{
data[i]=rand()%1000;
}
QuickSort(data, 10000);
std::copy(data, data+10000, std::ostream_iterator<int>(std::cout, " "));
return 0;
}
此教程来源于97xxoo教程网(www.97xxoo.org)查看完整的教程请点:http://www.97xxoo.org/article/4/2008/20081020069.shtml
//
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <algorithm>
#include <iterator>
//随机选取中间数
template<typename T>
int select(T data[], int low, int high)
{
int middle=low+rand()%(high-low);
std::swap(data[middle], data[low]);
int i=low+1;
int j=high;
while ( i<=j )
{
while ( data[i]<data[low] )
++i;
while ( data[low]<data[j] )
--j;
if (i<j)
{
std::swap(data[i], data[j]);
++i;
--j;
}
else
++i;
}
std::swap(data[low], data[j]);
return j;
}
//快速排序函数
template <typename T>
void QuickSorter (T data[], int low, int high)
{
if ( low<high )
{
int n=select(data, low, high);
QuickSorter(data, low, n-1);
QuickSorter(data, n+1, high);
}
}
//快速排序包装器
template <typename T>
void QuickSort(T data[], int size)
{
srand(time(NULL));
QuickSorter(data, 0, size-1);
}
//测试例程
int _tmain(int argc, _TCHAR* argv[])
{
int data[10000];
for ( int i=0; i<10000; ++i )
{
data[i]=rand()%1000;
}
QuickSort(data, 10000);
std::copy(data, data+10000, std::ostream_iterator<int>(std::cout, " "));
return 0;
}
此教程来源于97xxoo教程网(www.97xxoo.org)查看完整的教程请点:http://www.97xxoo.org/article/4/2008/20081020069.shtml
相关文章推荐
- C语言常用的排序方法:冒泡排序,插入排序,快速排序,堆排序,希尔排序
- 快速排序的C语言实现及其时间复杂度
- 学习笔记:快速排序的C++、JavaScript(2种方法)、Java实现
- 快速排序--C语言
- 用纯C语言实现快速排序,分递归调用法和非递归调用法。
- 快速排序的两种实现方法
- 黑马程序员——C语言之排序方法
- C语言插入排序方法
- 快速排序的C语言源代码与分析
- c语言排序之冒泡排序,选择排序,插入排序,快速排序总结
- 快速排序的C语言实现
- 【算法总结系列-1】快速排序-c语言实现
- 快速排序C语言算法实现
- 快速排序的Java语言与C语言实现
- C语言快速排序实现
- c语言中的几种排序算法——冒泡排序、快速排序、插入排序、选择排序
- 快速排序---C语言实现
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- 快速排序方法Java实现与分析
- C语言快速取以2为底的对数的方法