第一范文网 - 专业文章范例文档资料分享平台

各种排序算法的稳定性和时间复杂度小结

来源:用户分享 时间:2025/12/6 23:54:26 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

冒泡 O(n2) O(n2) 稳定 O(1) n小时较好 交换 O(n2) O(n2) 不稳定 O(1) n小时较好 选择 O(n2) O(n2) 不稳定 O(1) n小时较好 插入 O(n2) O(n2) 稳定 O(1) 大部分已排序时较好 基数 O(logRB) O(logRB) 稳定 O(n) B 是真数(0-9),

R是基数(个十百)

Shell O(nlogn) O(ns) 1

以下是一个基于模板的通用排序:

这个程序我想就没有分析的必要了,大家看一下就可以了。不明白可以在论坛上问。 MyData.h文件

/////////////////////////////////////////////////////// class CMyData {

public:

CMyData(int Index,char* strData); CMyData();

virtual ~CMyData();

int m_iIndex;

int GetDataSize(){ return m_iDataSize; };

const char* GetData(){ return m_strDatamember; }; //这里重载了操作符:

CMyData& operator =(CMyData &SrcData); bool operator <(CMyData& data ); bool operator >(CMyData& data );

private:

char* m_strDatamember; int m_iDataSize; };

////////////////////////////////////////////////////////

MyData.cpp文件

//////////////////////////////////////////////////////// CMyData::CMyData(): m_iIndex(0), m_iDataSize(0),

m_strDatamember(NULL) { }

CMyData::~CMyData() {

if(m_strDatamember != NULL) delete[] m_strDatamember;

m_strDatamember = NULL; }

CMyData::CMyData(int Index,char* strData): m_iIndex(Index), m_iDataSize(0),

m_strDatamember(NULL) {

m_iDataSize = strlen(strData);

m_strDatamember = new char[m_iDataSize+1]; strcpy(m_strDatamember,strData); }

CMyData& CMyData::operator =(CMyData &SrcData) {

m_iIndex = SrcData.m_iIndex;

m_iDataSize = SrcData.GetDataSize();

m_strDatamember = new char[m_iDataSize+1]; strcpy(m_strDatamember,SrcData.GetData()); return *this; }

bool CMyData::operator <(CMyData& data ) {

return m_iIndex

bool CMyData::operator >(CMyData& data ) {

return m_iIndex>data.m_iIndex; }

///////////////////////////////////////////////////////////

////////////////////////////////////////////////////////// //主程序部分

#include #include \

template

void run(T* pData,int left,int right) {

int i,j;

T middle,iTemp; i = left; j = right;

//下面的比较都调用我们重载的操作符函数 middle = pData[(left+right)/2]; //求中间值 do{

while((pData[i]

while((pData[j]>middle) && (j>left))//从右扫描大于中值的数 j--;

if(i<=j)//找到了一对值 {

//交换

iTemp = pData[i]; pData[i] = pData[j]; pData[j] = iTemp; i++; j--; }

}while(i<=j);//如果两边扫描的下标交错,就停止(完成一次)

//当左边部分有值(left

run(pData,left,j);

//当右边部分有值(right>i),递归右半边 if(right>i)

run(pData,i,right); }

template

void QuickSort(T* pData,int Count) {

run(pData,0,Count-1); }

void main() {

CMyData data[] = { CMyData(8,\ CMyData(7,\ CMyData(6,\ CMyData(5,\ CMyData(4,\ CMyData(3,\ CMyData(2,\ CMyData(1,\ };

QuickSort(data,8); for (int i=0;i<8;i++)

cout<

各种排序算法的稳定性和时间复杂度小结.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4xxsl3y3831emx02t1p8_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top