IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Acm入门7:排序算法(未完 春节后更新) -> 正文阅读

[数据结构与算法]Acm入门7:排序算法(未完 春节后更新)

排序算法种类:

冒泡 选择 插入(希尔)

快速排序 分组排序 基数排序 桶排序 堆排序 归并排序?

#include <stdio.h>

void print(int* a, int len, bool isBefore = true);

int main() {
	int arr[10] = { 1,9,66,0,33,5,2,88,666,233 };

	print(arr, 10);
	print(arr, 10, false);
	while (1);
	return 0;
}

void print(int* a, int len, bool isBefore) {

	if (isBefore)
		printf("before sort:");
	else
		printf("after  sort:");

	for (int i = 0; i < len; i++)
		printf("%d", a[i]);
	printf("\n");
}

中间填充排序算法

冒泡排序(最简单):

思想(升序):

比较相邻的两个元素哪个比较大,若大的在后面,不管,若小的在后面交换

一轮过后,第len个数据就是最大的,

#include <stdio.h>


void print(int* a, int len, bool isBefore = true);
void bubble_sort(int* a, int len);

int main() {
	int arr[10] = { 1,9,66,0,33,5,2,88,666,233 };

	print(arr, 10);
	printf("bubble_sort\n");
	bubble_sort(arr, 10);
	print(arr, 10, false);
	while (1);
	return 0;
}

//冒泡排序

void bubble_sort(int* a, int len)
{
	int temp;
	for (int i = 0; i < len; i++) {//外层循环
		for (int j = 0; j < len - i - 1; j++) {
			printf("i:%d,j:%d", i, j);
			if (a[j] > a[j + 1]) {
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
}
void print(int* a, int len, bool isBefore) {

	if (isBefore)
		printf("before sort:");
	else
		printf("after  sort:");

	for (int i = 0; i < len; i++)
		printf("%d", a[i]);
	printf("\n");
}

选择排序:从待排数组中选择最合适的

一轮选一个最小的,下一轮继续选个最小的,9轮之后即可

#include <stdio.h>

void select_sort(int* a, int len);
void print(int* a, int len, bool isBefore = true);

int main() {
	int arr[10] = { 1,9,66,0,33,5,2,88,666,233 };

    void select_sort(arr, 10);
	print(arr, 10, false);
	while (1);
	return 0;
}

void select_sort(int* a, int len) {
	int temp;
	int minidx;
	for (int i = 0; i < len - 1; i++) {
		temp = a[i];
		minidx = i;
		for (int j = i; j < len; j++) {
			minidx = (a[j] < a[minidx]) ? j : minidx;
		}
		a[i] = a[minidx];
		a[minidx] = temp;
	}
}

void print(int* a, int len, bool isBefore) {

	if (isBefore)
		printf("before sort:");
	else
		printf("after  sort:");

	for (int i = 0; i < len; i++)
		printf("%d", a[i]);
	printf("\n");
}

插入排序

先假设数组有序,每次往有序数组中插入一个

#include <stdio.h>
#include <algorithm>

void print(int* a, int len, bool isBefore = true);
void insert_sort(int* a, int len);
int main() {
	int arr[10] = { 1,9,66,0,33,5,2,88,666,233 };
	printf("insert_sort\n");
	insert_sort(arr, 10);
	print(arr, 10, false);
	while (1);
	return 0;
}
void insert_sort(int* a, int len) {
	int temp;
	int j;
	for (int i = 1; i < len; i++) {
		temp = a[i];
		j = i - 1;
		while (j >= 0 && a[j] > temp) {
			a[j + 1] = a[j];
			j--;
		}
		a[j + 1] = temp;
		print(a, 10);
	}

}

void print(int* a, int len, bool isBefore) {

	if (isBefore)
		printf("before sort:");
	else
		printf("after  sort:");

	for (int i = 0; i < len; i++)
		printf("%d", a[i]);
	printf("\n");
}

希尔排序(对插入排序时间复杂度的优化)

引入步长概念,每次按照步长分组,组内做插入排序

步长每次变化,通常折半

#include <stdio.h>

void print(int* a, int len, bool isBefore = true);
void shell_sort(int* a, int len);
int main() {
	int arr[10] = { 1,9,66,0,33,5,2,88,666,233 };

	shell_sort(arr, 10);
	print(arr, 10, false);
	while (1);
	return 0;
}
void shell_sort(int* a, int len) {
	int step = len / 2;
	int temp = 0;
	int j;
	while (step) {

		for (int i = temp; i < len; i++) {
			temp = a[i];
			j = i - step;
			while (j >= 0 && a[j] > temp) {
				a[j + 1] = a[j];
				j--;
			}
			a[j + step] = temp;
			print(a, 10);
		}
		step = step / 2;
	}

}
void print(int* a, int len, bool isBefore) {

	if (isBefore)
		printf("before sort:");
	else
		printf("after  sort:");

	for (int i = 0; i < len; i++)
		printf("%d", a[i]);
	printf("\n");
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:51:59  更:2022-02-01 20:52:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:49:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码