bubbleSort, InsertionSort, mergeSort, heapSort实现

本文分享了四种经典排序算法(冒泡排序、插入排序、归并排序、堆排序)的C++实现代码,并通过一个示例展示了堆排序的具体应用。

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

今天一口气将这四个排序算法都实现了下,个人觉得代码完成度还不错。

有空再把radixSort写完

#include <iostream>

void swap(int* a, int* b)
{
	*a = *a^*b;
	*b = *a^*b;
	*a = *a^*b;
};

//Bubble Sort
void bSort(int* a, int n)
{
	int j = n - 1;

	bool isSorted;
	while(j > 0)
	{
		isSorted = true;
		for(int i = 0; i < j; i++)
		{
			if(a[i] > a[i + 1])
			{
				swap(&a[i], &a[i + 1]);
				isSorted = false;
			}
		}

		if(isSorted)
			break;

		j--;
	}
};

//Insertion Sort
void iSort(int* a, int n)
{
	int j = 1;

	while(j < n)
	{
		for(int i = j; i > 0; i--)
		{
			if(a[i] < a[i - 1])
			{
				swap(&a[i], &a[i - 1]);
			}
			else
				break;
		}

		j++;
	}
};

//Merge Sort
void merge(int* a, int l, int r, int m)
{
	int* arrL = new int[m - l + 1];
	int* arrR = new int[r - m];

	for(int i = l, k = 0; i <= m; i++, k++)
		arrL[k] = a[i];

	for(int i = m + 1, k = 0; i <= r; i++, k++)
		arrR[k] = a[i];

	int k = l;
	int i = 0, j = 0;
	while(i < m - l + 1 && j < r - m)
	{
		if(arrL[i] < arrR[j])
			a[k] = arrL[i++];
		else
			a[k] = arrR[j++];

		k++;
	}

	while(i < m - l + 1)
		a[k++] = arrL[i++];

	while(j < r - m)
		a[k++] = arrR[j++];

	delete[] arrL;
	delete[] arrR;
		
};

void mSort(int* a, int l, int r)
{
	if(l < r)
	{
		int m = (l + r) / 2;
		mSort(a, l, m);
		mSort(a, m + 1, r);
		merge(a, l, r, m);
	}
};

//Heap Sort
void siftDown(int* a, int n, int idx)
{
	while(2 * idx + 1 < n)
	{
		int swapElm = a[idx];
		int swapIdx = idx;
		if(swapElm > a[2 * idx + 1])
		{
			swapElm = a[2 * idx + 1];
			swapIdx = 2 * idx + 1;
		}

		if(2 * idx + 2 < n)
			if(swapElm > a[2 * idx + 2])
			{
				swapElm = a[2 * idx + 2];
				swapIdx = 2 * idx + 2;
			}

		if(idx != swapIdx)
		{
			swap(&a[swapIdx], &a[idx]);
			idx = swapIdx;
		}
		else
			return;
	}
};

void heapify(int* a, int n)
{
	int idx = (n - 2) / 2;

	while(idx >= 0)
	{
		siftDown(a, n, idx);
		idx--;
	}
};

void heapSort(int* a, int n)
{
	int* heap = new int[n];

	for(int i = 0; i < n; i++)
	{
		heapify(a + i, n - i);
	}
};


int main()
{
	int a[] = {12,5,45,66,15,4,2,3,1};
	heapSort(a, 9);

	for(int i = 0; i < 9; i++)
	{
		std::cout << a[i] << " ";
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值