当前位置: 首页 > news >正文

递归时间复杂度(master),时间复杂度为O(NlogN)的排序

归并排序:

#include<iostream>
#include<string>
#include<fstream>
using namespace std;

void merge(int arr[], int L, int R, int mid)
{
	
	int* help = new int[R - L + 1];
	int i = 0;
	int p1 = L;
	int p2 = mid + 1;
	while (p1 <= mid && p2 <= R)
	{
		help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++];
	}
	while (p1 <= mid)
	{
		help[i++] = arr[p1++];
	}
	while (p2 <= R)
	{
		help[i++] = arr[p2++];
	}
	for (int j = 0;j < i;j++)
	{
		arr[L + j] = help[j];
	}
	delete[] help;

}
void Process(int arr[],int L,int R)
{
	if (L == R)
	{
		return;
	}
	int mid = L + ((R - L) >> 1);
	Process(arr, L, mid);
	Process(arr, mid + 1, R);
	merge(arr, L, R, mid);
	
}

int main()
{
	int arr[] = { 11,3,5,9,9,26,113 };
	int len = sizeof(arr) / sizeof(arr[0]);
	Process(arr, 0, len-1);
	for (int i = 0;i < len;i++)
	{
		cout << arr[i] << " ";
	}
	return 0;
}

 小和问题:

#include<iostream>
#include<string>
#include<fstream>
using namespace std;

int merge(int arr[], int L, int R, int mid)
{
	
	int* help = new int[R - L + 1];
	int i = 0;
	int p1 = L;
	int p2 = mid + 1;
	int sort = 0;
	while (p1 <= mid && p2 <= R)
	{
		sort += arr[p1] < arr[p2] ? (R - p2 + 1) * arr[p1] : 0;
		help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
	}
	while (p1 <= mid)
	{
		help[i++] = arr[p1++];
	}
	while (p2 <= R)
	{
		help[i++] = arr[p2++];
	}
	for (int j = 0;j < i;j++)
	{
		arr[L + j] = help[j];
	}
	delete[] help;
	return sort;

}
int Process(int arr[],int L,int R)
{
	if (L == R)
	{
		return 0;
	}
	int mid = L + ((R - L) >> 1);
	return 
	Process(arr, L, mid)+
	Process(arr, mid + 1, R)+
	merge(arr, L, R, mid);
	
}

int main()
{
	int arr[] = { 11,3,5,9,9,26,113 };
	int len = sizeof(arr) / sizeof(arr[0]);
	cout << Process(arr, 0, len - 1) << endl;
	for (int i = 0;i < len;i++)
	{
		cout << arr[i] << " ";
	}
	return 0;
}

逆序对问题:

#include<iostream>
#include<string>
#include<fstream>
using namespace std;

int merge(int arr[], int L, int R, int mid)
{

	int* help = new int[R - L + 1];
	int i = 0;
	int p1 = L;
	int p2 = mid + 1;
	int sort = 0;
	while (p1 <= mid && p2 <= R)
	{

		sort += arr[p2] < arr[p1] ? (p1 - L + 1) : 0;
		int j = 0;
		while (arr[p2] < arr[p1] && j + p1 < p2)
		{
			cout << arr[p1 + (j++)] << " : " << arr[p2] << endl;
		}
		help[i++] = arr[p2] < arr[p1] ? arr[p2++] : arr[p1++];
	}
	while (p1 <= mid)
	{
		help[i++] = arr[p1++];
	}
	while (p2 <= R)
	{
		help[i++] = arr[p2++];
	}
	for (int j = 0;j < i;j++)
	{
		arr[L + j] = help[j];
	}
	delete[] help;
	return sort;

}
int Process(int arr[], int L, int R)
{
	if (L == R)
	{
		return 0;
	}
	int mid = L + ((R - L) >> 1);
	return
		Process(arr, L, mid) +
		Process(arr, mid + 1, R) +
		merge(arr, L, R, mid);

}

int main()
{
	int arr[] = { 1,3,4,2,5 };
	int len = sizeof(arr) / sizeof(arr[0]);
	cout << Process(arr, 0, len - 1) << endl;
	for (int i = 0;i < len;i++)
	{
		cout << arr[i] << " ";
	}
	return 0;
}

 荷兰国旗问题:

#include<iostream>
#include<string>
#include<fstream>
using namespace std;

void swap(int &a, int &b)
{
	int tmp = a;
	a = b;
	b = tmp;
}
void Sort(int arr[], int len)
{
	int p1 = -1;
	int p2 = len;
	int i = 0;
	int num = arr[len - 1];
	while (i < p2)
	{
		if (arr[i] < num)
		{
			swap(arr[i++], arr[++p1]);
		}
		else if (arr[i] > num)
		{
			swap(arr[i], arr[--p2]);
		}
		else
		{
			i++;
		}
		

	}
}

int main()
{
	int arr[] = { 1,3,4,2,5,3,2,1,4,5,7,5,5 };
	int len = sizeof(arr) / sizeof(arr[0]);
	Sort(arr, len);
	for (int i = 0;i < len;i++)
	{
		cout << arr[i] << " ";
	}
	return 0;
}

 

 

 

相关文章:

  • 使用spring data MongoDB对MongoDB进行简单CURD操作示例
  • 嵌入式人工智能应用- 第九章 物体识别
  • 织梦dedecmsV5.7提示信息提示框美化(带安装教程和效果展示)
  • 【NLP】 3. Distributional Similarity in NLP(分布式相似性)
  • AI数字人分身系统(Digital Human System)的源码开发、SaaS平台模型技术方案和开发步骤
  • 自由学习记录(44)
  • 2.4滑动窗口专题:将 x 减到 0 的最小操作数
  • GOC学习
  • LeetCode 3340.检查平衡字符串:模拟
  • C++模板特化与偏特化
  • 315周六复盘(118)本周回顾
  • Java中类和对象
  • R语言的移动应用开发
  • 对称加密算法及其在网页逆向分析中的应用
  • BT-Basic函数之首字母F
  • 六十天前端强化训练之第二十天React Router 基础详解
  • Redis学习
  • 栈区、堆区、静态区
  • STL之关联容器(map ,set)
  • 【AI 加持下的 Python 编程实战 2_03】第二章:Copilot 辅助编程入门——环境搭建、基本工作流程以及数据分析案例演示(含本地实测)
  • 习近平出席俄罗斯总统举行的欢迎仪式
  • 常州市委原常委、组织部部长陈翔调任江苏省民宗委副主任
  • 化学家、台湾地区“中研院”原学术副院长陈长谦逝世
  • 华为招聘:未与任何第三方开展过任何形式的实习合作
  • 探索人类的心灵这件事,永远也不会过时
  • 观察|22项达全球最优,世行为上海营商环境“盖章”