| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 415 人关注过本帖
标题:网络日志2
取消只看楼主 加入收藏
e4lich
Rank: 2
等 级:新手上路
威 望:4
帖 子:182
专家分:0
注 册:2006-10-26
收藏
 问题点数:0 回复次数:0 
网络日志2

评论各种排序算法示例
/*! @Sort.cpp
********************************************************************************
文件实现功能 : 各种常见的排序算法
作者 : e4lich
版本 : 2.0
--------------------------------------------------------------------------------
备注 : 无
--------------------------------------------------------------------------------
include "stdio.h"
#include "stdlib.h"
#include "time.h"

#define BUFFER_SIZE 10

/*! @class Sort
********************************************************************************
类名 : Sort
功能 : 实现各种常见的排序算法
参数 : 无
返回值 : 无
抛出异常 : 无
--------------------------------------------------------------------------------
典型用法 :
: Sort sort; //定义一个类对象
: Sort.Display(); //排序前显示内容
: Sort::QuickSort(); //调用快速排序方法
: Sort.Display(); //排序后内容显示
--------------------------------------------------------------------------------
*******************************************************************************/
class Sort
{
public:
Sort(int nSize = BUFFER_SIZE); //构造函数
virtual ~Sort(); //析构函数

void InitRandBuffer(); //用随机数填充数组
void BubbleSort(); //冒泡排序算法
void SelectSort(); //选择排序算法
void InsertSort(); //插入排序算法
void QuickSort(); //快速排序算法
void ShellSort(); //希尔排序算法
void Display(); //显示数组内容
private:
void _QuickSort(const int left, const int right);
int Partition(const int left, const int right);
int *m_pBuffer; //数组缓冲区地址
int m_nSize; //数组大小
};

//构造函数
Sort::Sort(int nSize) : m_nSize(nSize)
{
if(nSize <= 0)
{
m_nSize = BUFFER_SIZE;
}
m_pBuffer = new int[m_nSize];
}

//析构函数
Sort::~Sort()
{
if(m_pBuffer)
{
delete [] m_pBuffer;
m_pBuffer = NULL;
}
}

//用随机数填充数组
void Sort::InitRandBuffer()
{
srand((unsigned int)time(NULL));
for(int i = 0; i < m_nSize; i++)
{
m_pBuffer[i] = rand() % 100;
}
}

//数组内容显示
void Sort::Display()
{
printf("The content of buffer is: ");
for(int i = 0; i < m_nSize; i++)
printf("%d ", m_pBuffer[i]);

putchar('\n');
}

//冒泡排序
void Sort::BubbleSort()
{
for(int i = 0; i < m_nSize; i++)
{
for(int j = i; j < m_nSize; j++)
{
if(m_pBuffer[i] > m_pBuffer[j])
{
m_pBuffer[i] ^= m_pBuffer[j];
m_pBuffer[j] ^= m_pBuffer[i];
m_pBuffer[i] ^= m_pBuffer[j];
}
}
}
}

//选择排序
void Sort::SelectSort()
{
int nMinIndex(0);
for(int i = 0; i < m_nSize - 1; i++)
{
nMinIndex = i;
for(int j = i + 1; j < m_nSize; j++)
{
if(m_pBuffer[nMinIndex] > m_pBuffer[j])
{
nMinIndex = j;
}
}

if(i != nMinIndex)
{
m_pBuffer[i] ^= m_pBuffer[nMinIndex];
m_pBuffer[nMinIndex] ^= m_pBuffer[i];
m_pBuffer[i] ^= m_pBuffer[nMinIndex];
}
}
}

//插入排序
void Sort::InsertSort()
{
int Temp(0);
for(int i = 1; i < m_nSize; i++)
{
Temp = m_pBuffer[i];
for(int j = i; j > 0; j--)
{
if(m_pBuffer[j-1] > Temp)
{
m_pBuffer[j] = m_pBuffer[j-1];
}
else
{
break;
}
}

if(j != i)
{
m_pBuffer[j] = Temp;
}
}
}

//快速排序
void Sort::QuickSort()
{
_QuickSort(0, m_nSize - 1);
}

void Sort::_QuickSort(const int left, const int right)
{
if(left < right)
{
int i = Partition(left, right);
_QuickSort(left, i - 1);
_QuickSort(i + 1, right);
}
}

int Sort::Partition(const int left, const int right)
{
int prvotPos = left;
int prvot = m_pBuffer[align=left];

for(int i = left + 1; i <= right; i++)
{
if((m_pBuffer[i] < prvot) && (++prvotPos != i))
{
m_pBuffer[i] ^= m_pBuffer[prvotPos];
m_pBuffer[prvotPos] ^= m_pBuffer[i];
m_pBuffer[i] ^= m_pBuffer[prvotPos];
}
}

if(left != prvotPos)
{
m_pBuffer[align=left] ^= m_pBuffer[prvotPos];
m_pBuffer[prvotPos] ^= m_pBuffer[align=left];
m_pBuffer[align=left] ^= m_pBuffer[prvotPos];
}

return prvotPos;
}

//希尔排序
void Sort::ShellSort()
{
int gap = m_nSize, Temp;
while((gap /= 2) >= 1)
{
for(int i = 0; i < gap; i++)
{
for(int j = i + gap; j < m_nSize; j += gap)
{
Temp = m_pBuffer[j];

for(int k = j; k >= gap; k -= gap)
{
if(m_pBuffer[k - gap] > Temp)
m_pBuffer[k] = m_pBuffer[k - gap];
else
break;
}

if(k != j)
m_pBuffer[k] = Temp;
}
}
}
}

//主函数
int main(int argc, char* argv[])
{
int choice = -1;
Sort sort;

while(choice != 0)
{
sort.InitRandBuffer();

system("cls");
printf("This is a demo of sort algorithm\n");
printf("1. Bubble sort\n");
printf("2. Select sort\n");
printf("3. Insert sort\n");
printf("4. Quick sort\n");
printf("5. Shell sort\n");
printf("0. Exit\n");
printf("Please enter your choice: ");

flushall();
scanf("%d", &choice);

switch(choice)
{
case 1 :
printf("Before Bubble sort: \n");
sort.Display();
sort.BubbleSort();
printf("After Bubble sort: \n");
sort.Display();
system("pause");
break;
case 2 :
printf("Before Select sort: \n");
sort.Display();
sort.SelectSort();
printf("After Select sort: \n");
sort.Display();
system("pause");
break;
case 3 :
printf("Before Insert sort: \n");
sort.Display();
sort.InsertSort();
printf("After Insert sort: \n");
sort.Display();
system("pause");
break;
case 4 :
printf("Before Quick sort: \n");
sort.Display();
sort.QuickSort();
printf("After Quick sort: \n");
sort.Display();
system("pause");
break;
case 5 :
printf("Before Shell sort: \n");
sort.Display();
sort.ShellSort();
printf("After Shell sort: \n");
sort.Display();
system("pause");
break;
default:
break;
}
}

return 0;
}

搜索更多相关主题的帖子: 网络日志 
2006-10-27 20:04
快速回复:网络日志2
数据加载中...
 
   



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

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