10、算法

八大排序:

1、冒泡排序(沉尸排序)

**思想:**每次找到一个最大值放在最后面,每次找到一个最大值向后放(升序),两两比较,如果左边大于右边就交换他们的的值,每次比较结束后会得到最大值。降序就反过来。

**时间复杂度:**O(n^2)

**空间复杂度:**O(1)

**优点:**实现简单,稳定,不存在跳跃交换

**缺点:**时间复杂度大

#include<stdio.h>
#include<assert.h>
int * Bubble_sort(int* arr, int arrSize)
{
	assert(arr != NULL);
	for (int i = 0; i < arrSize - 1; i++)//比较的轮数
	{
		int rt = 0;//用于优化多余的比较
		for (int j = 0; j < arrSize - 1-i; j++)//比较的次数
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = 0;
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				rt = -1;
			}
		}
		if (rt != -1)
		{
			break;//如果rt=-1则表示还有值交换位置
		}
	}
	return arr;
}
int main()
{
	int arr[10] = { 1,22223,34,45,222,122,322,43434,44,2323 };
	Bubble_sort(arr, 10);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qgvdKMh-1636030575859)(C:\Users\刘锦\AppData\Roaming\Typora\typora-user-images\image-20211104195404564.png)]

2、选择排序

**思想:**每一轮从待排序列中找到最小值的下标,和待排序列的第一个值进行比较(升序),每次找到一个最小值放在最前面。

**注意!!!:**找的是最小值的下标,而不是最小值

**时间复杂度:**O(n^2)

**空间复杂度:**O(1)

**稳定性:**不稳定,存在跨越交换

#include<stdio.h>
#include<assert.h>
void Select_sort(int* arr, int arrSize)
{
	assert(arr != NULL);
	int minindex = 0;//保存最小值下标
	for (int i = 0; i < arrSize - 1; i++)//轮数
	{
		minindex = i;
		for (int j = i + 1; j < arrSize; j++)//在待排序序列中找到最小值下标,和当前数进行交换
		{
			if (arr[j ] < arr[minindex])
			{
				minindex = j ;
			}
		}
		//第二层for循环结束后,能确定最小值下标保存在minindex中
		if (minindex != i)
		{
			int temp = 0;
			temp = arr[i];
			arr[i] = arr[minindex];
			arr[minindex] = temp;
		}
	}
}
int main()
{
	int arr[10] = { 1,233,12,12,2,1221,122121,32,34,45 };
	Select_sort(arr, 10);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4D1LRwIU-1636030575861)(C:\Users\刘锦\AppData\Roaming\Typora\typora-user-images\image-20211104203554295.png)]

3、直接插入

4、堆排序

5、基数排序

6、二路归并排序

7、希尔排序


[外链图片转存中...(img-4D1LRwIU-1636030575861)]

## 3、直接插入

## 4、堆排序

## 5、基数排序

## 6、二路归并排序

## 7、希尔排序

## 8、快排
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值