【算法导论】排序算法 零

本文介绍了多种排序算法,如选择法、冒泡法、插入法等,并通过GTest框架进行算法验证。提供了源码下载链接及《算法导论》资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、选择法排序、冒泡排序、插入法排序

二、快速排序、分治法排序、堆排序

三、计数排序、基数排序、桶排序

gtest介绍及测试用例如下:测试框架之GTest

MIT《算法导论》下载:hereorhttp://download.youkuaiyun.com/detail/ceofit/4212385

源码下载:here orhttp://download.youkuaiyun.com/detail/ceofit/4218488

 

定义基本的交换类:后续介绍几个排序算法,作一些准备工作。

重定义基本类型及宏:

#ifndef NULL
#define NULL 0
#endif

typedef unsigned char byte;
typedef unsigned long long uint64;
typedef long long int64;
typedef unsigned long uint32;
typedef long int32;
typedef unsigned short uint16;
typedef short int16;
typedef unsigned char uint8;
typedef char int8;

定义排序函数的统一格式,例如选择法排序:
void SelectionSort(int *pArray,int cnt);

定义排序函数指针类型SK_SORT:

typedef void(*SK_SORT)(int *pArray,int cnt);

定义几个基本函数:

获取在min与max之间的随机数,要求max-min<65535:

int get_random(int min,int max)
{
	static bool bget_random_init = true;
	if(bget_random_init)
	{
		srand(time(0));
		bget_random_init = false;
	}
	return min + rand() % (max - min);
}

获取数组最大最小值:

int get_max(int *pArray,int cnt) {     if(cnt <= 0)         return 0;     int max = pArray[0];     int i = 0;     for(i=1; i<cnt; i++)     {         max = max>=pArray[i] ? max : pArray[i];     }     return max; }

int get_min(int *pArray,int cnt) {     if(cnt < 0)         return 0;     int min = pArray[0];     int i = 0;     for(i=1; i<cnt; i++)     {         min = min<=pArray[i] ? min : pArray[i];     }     return min; }


获取数值位数:

int get_bitcnt(int n)
{
    int cnt=0;
    if(((n>>31) & 0x01) == 1)
        return 32;

    while(n)
    {
        cnt++;
        n=n>>1;
    }
    return cnt;
}

定义基本的交换类:

inline void exchange(int *x,int *y)
{
	int t = *x;
	*x = *y;
	*y = t;
}

测试使用gtest测试框架

有几点注意:

1、使用基本int类型,因为主要学习算法,所以算法并没考虑做到通用,没有使用模板或void*类型。

2、排序默认都是从小到大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值