排序算法

#include<assert.h>
#include <stdlib.h>
#include <iostream>
#include<assert.h>
#include<stdlib.h>
using namespace std;
#define RADIX_10 10       
#define KEYNUM_31 10      
void Swap(int* a, int* b)
{
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
//1.插入排序
void InsertSort(int* a, int n) 
{
	for (int i =0; i<n-1;i++)
	{
		int tmp;
        int end = i;          
		tmp = a[end + 1];     
		while (end>=0)
		{
			if (a[end]>tmp)   
			{    
				a[end + 1] = a[end];      
				--end;
			}                  
			else{
				break;
			}
		}
		a[end + 1] = tmp;
	}}
//希尔排序
void ShellSort(int* a, int n)    
{
	int gap = n;
	while (gap>1)
	{
		gap=gap/3+1;
		for (int i = 0; i < n-gap;i++)
		{
			int tmp;
			int end = i;
			tmp = a[end + gap];     
			while (end>=0){
				if (a[end]>tmp){     
					a[end + gap] = a[end];    
					--end;
				}                   
				else{
					break;
				}
			}
			a[end + gap] = tmp;
		}	
		}
	}
//选择排序
void SelectSort1(int* a, int n)
{
	int  min,i ;
	for (i = 0; i < n;i++)
	{
		min = i;
		for (int j = i + 1; j < n;j++)
		{
			if (a[j]<=a[min])
			{
				min = j;
			}
		}
		swap(a[min], a[i]);
	}
}
void SeleteSort2(int* a, int n)   
{
	int max, min, i, j;
	for (i =1; i <=n / 2;i++)
	{
		min = i; max = i;    
		for (j = i + 1; j <=n-i;j++)
		{
			if (a[j] >a[max])
			{
				max = j;
			}	
			if (a[j] <a[min])
			{
				min = j;
			}
		}
		swap(a[i], a[min]);  
		swap(a[n-i], a[max]);		
	}
}
//堆排序
void AdjustHeap(int *a, int root, int len)
{
	int parent = root;
	int child = 2 * parent + 1;
	while (child<len)
	{
		if (child+1<len&&a[child]<a[child+1])
		{
			++child;
		}
		if (a[parent]<a[child])
		{
			swap(a[parent],a[child]);
			parent= child;
			child = 2 * parent + 1;
		}
		else
		{
			break;
		}
	}
}
void BuildHeap(int * a, int len)
{
	for (int i = (len - 1) / 2; i >= 0; i--)
	{
		AdjustHeap(a, i, len);
	}
}
void HeapSort(int* a, int len)
{
	BulidHeap(a, len);
	for (int i = len - 1; i > 0;i--)
	{
		int temp = a[i]; a[i] = a[0]; a[0] = temp;
		AdjustHeap(a,0, i);
	}
}
//冒泡排序
void BubbleSort(int* a,int len)
{
	for (int i= 0; i < len;i++)
   {
		for (int j = 0; j < len - i-1;j++)
		{
			if (a[j]>a[j+1])
			{
				swap(a[j],a[j+1]);
			}
		}
   }
}
//快速排序
int GetMidIndex(int* a, int left, int right)  
{
	int mid = left+(left - right) / 2;
	if (a[left]<a[mid])
	{
		if (a[mid]<a[right])
		{
			return mid;
		}
		else if (a[left]>a[right])
		{
			return left;
		}
		else
			return right;
	}
	else  //left>mid
	{
		if (a[mid]>a[right])
		{
			return mid;
		}
		else if (a[left] < a[right])
		{
			return left;
		}
		else
			return right;
	}

}
int   PartSort1(int* a, int left, int right)
{
	int mid = GetMidIndex(a, left,right);
	swap(a[mid],a[right]);
	int key = a[right];
	int begin = left;
	int end = right;
	while (begin < end)
	{
		while (begin<end&&a[begin]<=key)
		{
			++begin;
		}
		while (begin<end&&a[end]>=key)
		{
			--end;
		}
		if (begin < end)
 	swap(a[begin], a[end]);
	}
 
		swap(a[begin],a[right]);
		return begin;
}
void QuickSort(int* a, int left, int right)
{
	assert(a);

	if (left >= right)
		return;

	if (right - left < 5)
	{
		InsertSort(a + left, right - left + 1);
	}
	else
	{
		int div = PartSort1(a, left, right);
		QuickSort(a, left, div - 1);
		QuickSort(a, div + 1, right);
	}
}
//归并排序
void  Merge(int* a, int* tmp, int begin1, int end1, int begin2, int end2)
{
	int pos = begin1;
	int index = begin1;
	while (begin1<=end1&&begin2<=end2)
	{
		if (a[begin1]<a[begin2])
		{
			tmp[index++] = a[begin1++];
		}
		else
		{
			tmp[index++] = a[begin2++];
		}

	}
	while (begin1<=end1)
	{
		tmp[index++] = a[begin1++];
	}
	while (begin2<=end2)
	{
		tmp[index++] = a[begin2++];
	}
	memcpy(a+pos,tmp+pos,sizeof(int)*(end2-pos+1));
}
void _MergeSort(int* a,int* tmp,int left,int right)
{
   if (left>=right)
   {
	   return;
   }
   int mid = left + (right-left) / 2;
   _MergeSort(a,tmp,left,mid);
   _MergeSort(a, tmp, mid + 1, right);
   Merge(a, tmp, left, mid, mid + 1, right);
}
void MergeSort(int* a, int len)
{
	assert(a);
	int* tmp = new int[len];
	_MergeSort(a,tmp,0,len-1);
	delete[]  tmp;
}
void Display(int* a, int n)
{
	for (int i = 0; i < n;i++)  
	{
		cout << a[i] <<"   ";
	}
	cout << endl;
}
void TestInsertSort()
{
	int a[] = { 2, 1, 3, 4, 7, 4, 6, 8, 9, 10 };
	Display(a, sizeof(a) / sizeof(a[0]));
	InsertSort(a, sizeof(a) / sizeof(a[0]));
	Display(a, sizeof(a) / sizeof(a[0]));
}
void TestShellSort()
{
	int a[] = { 1, 3, 4, 5, 4, 6, 8, 9, 10 };
	Display(a, sizeof(a) / sizeof(a[0]));
	ShellSort(a, sizeof(a) / sizeof(a[0]));
	Display(a, sizeof(a) / sizeof(a[0]));
}
void TestSelectSort()
{
	int a[] = { 11, 3, 30, 5, 4,60, 5, 9, 10 };
	Display(a, sizeof(a) / sizeof(a[0]));
	SeleteSort1(a, sizeof(a) / sizeof(a[0]));
	Display(a, sizeof(a) / sizeof(a[0]));
	SeleteSort2(a, sizeof(a) / sizeof(a[0]));
	Display(a, sizeof(a) / sizeof(a[0]));
}
void TestHeapSort()
{
	int a[] = {3,1,4,2,5,8,6,9,7,10};
	Display(a, sizeof(a) / sizeof(a[0]));
	int len = sizeof(a) / sizeof(a[0]);
	HeapSort(a, len);
	Display(a, sizeof(a) / sizeof(a[0]));
}
void TestBubbleSort()
{
	int a[] = { 3, 1, 4, 2, 5, 4, 6, 9, 7, 10 };
	Display(a, sizeof(a) / sizeof(a[0]));
	int len = sizeof(a) / sizeof(a[0]);
	BubbleSort(a, len);
	Display(a, sizeof(a) / sizeof(a[0]));
}
void TestQuickSort()
{
	int a[] = { 3, 1, 4, 2, 5, 4, 6, 9, 7, 10 };
	Display(a, sizeof(a) / sizeof(a[0]));
	int len = sizeof(a) / sizeof(a[0]);
	QuickSort(a, 0, len-1);
	Display(a, sizeof(a) / sizeof(a[0]));
}
void TestMergeSort()
{
	int a[] = { 3, 1, 4, 2, 5, 4, 6, 9, 7, 10 };
	Display(a, sizeof(a) / sizeof(a[0]));
	int len = sizeof(a) / sizeof(a[0]);
	MergeSort(a, sizeof(a) / sizeof(a[0]));
	Display(a, sizeof(a) / sizeof(a[0]));
}

内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值