基础算法(Num012)

目录

排序的基本概念

1、排序

2、排序的稳定性

3、排序的过程

4、排序算法

一、冒泡排序

代码示例:

二、选择排序

代码示例:

三、顺序查找

代码示例:

四、二分查找

代码示例:


排序的基本概念

1、排序

是指把一组数据以某种关系(递增或递减)按顺序排列起来的一种算法。

例如:

  • 数列18、3、5、6、2、9、1、0、4、7

  • 递增排序后 0、1、2、3、4、5、6、7、8、9

  • 递减排序后9、8、7、6、5、4、3、2、1、0

2、排序的稳定性

  • 如果在一组需要排序的数据序列中,数据ki和kj的值相同,即ki==kj,且在排序前ki在序列中的位置领

  • 先于kj,那么当排序后,如果ki和kj的相对前后次序保持不变,即ki仍然领先于kj,则称此类排序算法

  • 是稳定的。如果ki和kj的相对前后次序变,即kj领先于ki了,则称此类排序算法是不稳定的。

3、排序的过程

排序的过程中需要进行如下两种基本操作:

  1. 比较两个数据的大小

  2. 移动两个数据的位置

4、排序算法

我们比较常用的排序算法有:冒泡排序、插入排序、选择排序、希尔排序(缩小增量排序)、快速排序、堆排序、归并排序


一、冒泡排序

代码示例:

cpp 复制代码
#include<stdio.h>

void bubblesSort(int *arr,int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1]) 
			{
				//交换两个值
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
//冒泡排序
int main()
{
	int arr[10] = { 5,9,4,2,3,7,6,8,0,1 };
	bubblesSort(arr, 10);

	for (int i = 0; i < 10; i++) 
		printf("%d ", arr[i]);

	getchar();
	getchar();
	return 0;
}

二、选择排序

代码示例:

cpp 复制代码
#include<stdio.h>

void selectSort(int *arr,int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		int max = i;
		for (int j = i; j < len; j++)
		{
			if (arr[max] < arr[j])
				max = j;
		}

		//交换两个值
		int temp = arr[i];
		arr[i] = arr[max];
		arr[max] = temp;
	}
}
//选择排序
int main()
{
	int arr[10] = { 5,9,4,2,3,7,6,8,0,1 };
	selectSort(arr, 10);

	for (int i = 0; i < 10; i++)
		printf("%d ", arr[i]);

	getchar();
	getchar();
	return 0;
}

三、顺序查找

代码示例:

cpp 复制代码
#include<stdio.h>

int find(int *arr,int len,int value)
{
	//顺序查找:从头遍历到尾,一个一个的查找过去
	int index = -1;	//默认没找到
	for (int i = 0; i < len; i++)
	{
		if (arr[i] == value)
		{
			index = i;
			break;
		}
	}
	return index;
}
//顺序查找
int main()
{
	srand(time(NULL));	//随机数种子

	int arr[1000] = { 0 };
	for (int i = 0; i < 1000; i++)
	{
		arr[i] = rand() % 200;	//	%N	   范围:0~(N-1)
	}

	int index = find(arr, 100, 123);
	printf("%d", index);

	getchar();
	getchar();
	return 0;
}

四、二分查找

代码示例:

cpp 复制代码
#include<stdio.h>

void bubblesSort(int *arr,int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				//交换两个值
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

int binary_search(int*arr,int len,int vlaue)
{
	int left = 0;
	int rigth = len - 1;

	while (left <= rigth)
	{
		int mid = (left + rigth) / 2;	//中间下标
		if (arr[mid] == vlaue)
		{
			return mid;
		}

		if (vlaue > arr[mid])
			left = mid + 1;
		if (vlaue < arr[mid])
			rigth = mid - 1;
	}
	return -1;
}
//二分查找
int main()
{
	srand(time(NULL));	//随机数种子

	int arr[100] = { 0 };
	for (int i = 0; i < 100; i++)
	{
		arr[i] = rand() % 200;	//	%N	范围:0~(N-1)
	}

	bubblesSort(arr, 100);	//使用二分查找,一定是有序的内容才能二分查找

 	int index = binary_search(arr, 100, 123);
	printf("%d", index);
 
	getchar();
	getchar();
	return 0;
}
相关推荐
小陈phd4 小时前
多模态大模型学习笔记(二)——机器学习十大经典算法:一张表看懂分类 / 回归 / 聚类 / 降维
学习·算法·机器学习
@––––––4 小时前
力扣hot100—系列4-贪心算法
算法·leetcode·贪心算法
難釋懷4 小时前
Lua脚本解决多条命令原子性问题
开发语言·lua
CoovallyAIHub4 小时前
让本地知识引导AI追踪社区变迁,让AI真正理解社会现象
深度学习·算法·计算机视觉
CoderCodingNo4 小时前
【GESP】C++ 二级真题解析,[2025年12月]第一题环保能量球
开发语言·c++·算法
yumgpkpm4 小时前
预测:2026年大数据软件+AI大模型的发展趋势
大数据·人工智能·算法·zookeeper·kafka·开源·cloudera
独好紫罗兰4 小时前
对python的再认识-基于数据结构进行-a005-元组-CRUD
开发语言·数据结构·python
CoovallyAIHub4 小时前
AAAI 2026这篇杰出论文说了什么?用LLM给CLIP换了个“聪明大脑”
深度学习·算法·计算机视觉
chilavert3184 小时前
技术演进中的开发沉思-356:重排序(中)
java·开发语言
wengqidaifeng4 小时前
数据结构(三)栈和队列(上)栈:计算机世界的“叠叠乐”
c语言·数据结构·数据库·链表