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

-代码分享-

插入排序

void lnsertionSort(int a[], int n)
{
int end = 0;
int tmp = 0;
int i = 0;
for (i = 0;i < n - 1; i++)
{
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)
{
//gap是间隔(增量)
int gap = n;
while (gap > 1)
{
gap /= 2;//间隔(增量)每次循环都缩小一半

	//end表示  每一组  有序序列最末尾的元素的下标
	int end = 0;
	//tmp表示  每一组  无序序列的第一个元素的下标
	int tmp = 0;
	int i = 0;
	//把插入排序中的1都换成gap
	for (i = 0; i < n - gap; i++)
	{
		end = i;
		tmp = a[end + gap];
		while (end >= 0)//end
		{
			//如果前gap个元素大于后gap个,就让前gap个向后移gap位
			//给后gap个可插入的空隙
			if (a[end] > tmp)
			{
				a[end + gap] = a[end];
				end-=gap;
			}
			else
			{	//因为是从已经有序的序列的末尾向前插入
			    //所以前一个之前的元素都比它小,所以不用再比较,直接结束循环
				break;
			}
		}
		//插入空出的空隙
		a[end + gap] = tmp;
	}
}

}

冒泡排序

void bubbleSort(int a[], int n)
{
int i = 0;
int j = 0;
int flag = 0;
//总共需要n趟冒泡排序
for (i = 0; i < n; i++)
{
//重置flag的值
flag = 0;

	//一趟冒泡排序,排出一个最大值
	for (j = 0; j < n - i - 1; j++)
	{
		if (a[j] > a[j + 1])
		{
			int tmp = a[j];
			a[j] = a[j + 1];
			a[j + 1] = tmp;
			
		//只要一趟冒泡排序发生了交换,就还没排序完成
			flag = 1;
		}
	}
	//如果一趟冒泡排序之后,flag还是0,
	//就说明没有交换,已经有序
	if (flag == 0)
		break;
}

}

交换函数

void Swap(int* p, int* q)
{
int tmp = *p;
*p = *q;
*q = tmp;
}
选择排序
void SelectSort(int a[], int n)
{
//count表示有序序列末尾的下标
int count= 0;
int i = 0;
//min为最小值的下标
int min = 0;
while(count<n)
{
//每一趟选择排序都从有序数列末尾开始找最小值
min = count;
for (i = count; i<n;i++)
{
if (a[min] > a[i])
min = i;
}
//Swap为交换函数
Swap(&a[count], &a[min]);
//每一趟选择排序之后有序数列末尾下标加一
count++;
}
}


http://www.kler.cn/a/226557.html

相关文章:

  • QSqlRelationalTableModel 关系表格模型
  • PPT录屏功能在哪?一键快速找到它!
  • 笔记本加装内存条
  • 算法学习——华为机考题库1(HJ1 - HJ10)
  • 07 SB3之@HttpExchange(TBD)
  • 什么是单例模式与饿汉式单例模式的区别是什么?
  • Mac 上如何安装Mysql? 如何配置 Mysql?以及如何开启并使用MySQL
  • C#实现windows系统重启、关机
  • C++函数分文件编写之VScode版
  • 【gcc】webrtc发送侧计算 丢包率
  • Hive collect_set()、collect_list()列转行,并对转换后的行值排序
  • 一键转换MOV至MP3:轻松删除原视频,释放存储空间!
  • git diff查看比对两次不同时间点提交的异同
  • 力扣反转两次的数字
  • C语言第十七弹---指针(一)
  • Ansible概述、Ansible环境准备、Ansibleadhoc临时命令语法、命令模块、文件模块、用户模块、综合练习
  • MySQL之DQL正则表达式
  • Linux系统MySQL重置root密码
  • 如何用Docker+jenkins 运行 python 自动化?
  • 计算机网络——链路层(1)