我的创作纪念日 ---- 2024/3/26

前言

2024.3.26是我在CSDN成为创作者的第128天,也是我第一次真正在网上创作的第128天

当我还在日常创作时,突然发现我收到了一封信

我想我可以分享一下这段时间的感想以及收获

机缘

在CSDN的这段时间里,我学习到了很多知识,也丰富了我的日常生活

在我编写实战项目的时候,有很多操作我还是不是很了解的,尤其是在学校的实战项目,当我遇到不会的代码时可以利用CSDN来学习我的知识盲区,实战项目结束后我认为将项目写到博客里是很有意义的

我认为当我意识到了写博客的时候我的一个机缘就来了

一是可以帮助别人了解相关方面的思路知识等

二是可以巩固自身的基础

做这件事情不仅仅对自身受益匪浅,对他人亦是莫大帮助

只有当自己需要帮助去观看别人的博客的时候,才能感受到一篇好的博客是有多么重要!!!


收获

目前在这段时间里只创作了22篇博客,跟我想的进度差不多

我给自己的任务是一星期一篇博客, 希望能够对各位有所收获

我的收获即是对知识的巩固,当然如若能帮助到别人那更是我莫大的收获


日常

创作目前已经是我学习、生活中的一部分了

当我学习一个知识点一段时间之后总会忘记一部分,但这时候写博客不仅能帮助回忆,还能帮助其他人,与其他人一起进步学习

不管再忙,或许在夜间听听歌,敲敲键盘,不知不觉的一篇博客就完成了,这种沉浸其中的感觉也是非常不错的,虽然会感觉时间过的很快,但不会觉得这一天白费了


成就

目前大一下学期,学习进度只到了C++,进度不是很快,但我觉得我写的最好的代码就是数据结构的实现了

下面是快速排序的各种实现方法,其中涉及了递归、非递归(栈、队列)

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

// 快速排序递归实现
// 快速排序hoare版本
int PartSort1(int* a, int left, int right);

// 快速排序挖坑法
int PartSort2(int* a, int left, int right);

// 快速排序前后指针法
int PartSort3(int* a, int left, int right);

//快速排序
void QuickSort(int* a, int left, int right);

// 快速排序 非递归实现 栈
void QuickSortNonR1(int* a, int left, int right);

// 快速排序 非递归实现 队列
void QuickSortNonR2(int* a, int left, int right);

//三数取中法,让key值再中间提升快排效率
int GetMidIndex(int* a, int begin, int end)
{
	int mid = (begin + end) / 2;
	if (a[begin] > a[mid])
	{
		if (a[mid] > a[end])
		{
			return mid;
		}
		else if (a[begin] < a[end])
		{
			return begin;
		}
		else
		{
			return end;
		}
	}
	else //a[begin] < a[mid]
	{
		if (a[begin] > a[end])
		{
			return begin;
		}
		else if (a[end] > a[mid])
		{
			return mid;
		}
		else
		{
			return end;
		}
	}
}

int PartSort1(int* a, int left, int right)
{
	int mid = GetMidIndex(a, left, right);
	Swap(&a[mid], &a[left]);

	int keyi = left;

	while (left < right)
	{
		//要先找小,因为keyi在左,右边先出发相遇位置一定是小
		//找小
		while (left < right && a[right] >= a[keyi])
			right--;

		//找大
		//等号一定要加,因为begin是从keyi开始的
		while (left < right && a[left] <= a[keyi])
			left++;

		if (left < right)
			Swap(&a[left], &a[right]);
	}
	Swap(&a[keyi], &a[left]);

	return left;
}

int PartSort2(int* a, int left, int right)
{
	int mid = GetMidIndex(a, left, right);
	Swap(&a[mid], &a[left]);

	int hole = left;
	//key记录挖坑位置的值
	int key = a[hole];

	while (left < right)
	{
		while (left < right && a[right] >= key)
			right--;

		a[hole] = a[right];
		hole = right;

		while (left < right && a[left] <= key)
			left++;

		a[hole] = a[left];
		hole = left;
	}
	a[hole] = key;

	return hole;
}

int PartSort3(int* a, int left, int right)
{
	int mid = GetMidIndex(a, left, right);
	Swap(&a[mid], &a[left]);

	int key = left;
	int prev = left, cur = left + 1;
	while (cur <= right && prev != cur)
	{
		if (a[cur] <= a[key])
		{
			prev++;
			Swap(&a[cur], &a[prev]);
		}
		cur++;
	}
	Swap(&a[left], &a[prev]);

	return prev;
}

void QuickSort(int* a, int left, int right)
{
	if (left >= right)
		return;

	//先排好keyi这个固定位置,再向两边排
	int keyi = PartSort3(a, left, right);

	QuickSort(a, left, keyi - 1);
	QuickSort(a, keyi + 1, right);
}

//栈版本,深度优先
void QuickSortNonR1(int* a, int left, int right)
{
	Stack s;
	StackInit(&s);

	//必须先入栈入右区间再入左区间,因为栈是先进后出
	StackPush(&s, right);
	StackPush(&s, left);

	while (!StackEmpty(&s))
	{
		left = StackTop(&s);
		StackPop(&s);
		right = StackTop(&s);
		StackPop(&s);

		int keyi = PartSort1(a, left, right);

		if (left < keyi)
		{
			StackPush(&s, keyi - 1);
			StackPush(&s, left);
		}
		if (right > keyi)
		{
			StackPush(&s, right);
			StackPush(&s, keyi + 1);
		}
	}
}

//队列版本,广度优先
void QuickSortNonR2(int* a, int left, int right)
{
	Queue q;
	QueueInit(&q);

	QueuePush(&q, left);
	QueuePush(&q, right);

	while (!QueueEmpty(&q))
	{
		left = QueueFront(&q);
		QueuePop(&q);
		right = QueueFront(&q);
		QueuePop(&q);

		int keyi = PartSort1(a, left, right);

		if (left < keyi)
		{
			QueuePush(&q, left);
			QueuePush(&q, keyi - 1);
		}
		if (right > keyi)
		{
			QueuePush(&q, keyi + 1);
			QueuePush(&q, right);
		}
	}
}

这种使用了各种方法学以致用的感觉写出来的代码能够跑出来的时候

感觉是非常好的,就像做出来一道算法题一样,有过之而无不及


憧憬

目前对于未来的方向就是C++软件开发,所以我会往这个方向不断出发,学习后续知识的同时发布博客(c/c++、数据结构、Linux、MySQL等)

大一大二参加比赛,储备知识,大三找实习,大四收获offer

朝着那个遥不可及的offer一步步前进

做个自己都觉得自己自律的自己!

相关推荐
吃好睡好便好4 分钟前
说说科学爬山
学习·生活
lunzi_082642 分钟前
【学习笔记】《Python编程 从入门到实践》第8章:函数定义、参数传递与模块导入
笔记·python·学习
tyung1 小时前
Go 手写 Wait-Free SPSC 无界队列:无 CAS、无锁、泛型节点池
数据结构·后端·go
Chen_harmony1 小时前
一、数据结构概念和复杂度计算
数据结构
零陵上将军_xdr2 小时前
后端转全栈学习-Day5-JavaScript 基础-3
开发语言·javascript·学习
小欣加油2 小时前
leetcode287寻找重复数
数据结构·c++·算法·leetcode
05大叔2 小时前
对话系统学习,问答型数据库,闲聊型对话数据库
学习
nashane2 小时前
HarmonyOS 6商城开发学习:抢票倒计时与系统日历提醒——票务类场景的完整落地思路
学习·华为·harmonyos
伶俜663 小时前
零基础学 ArkUI 传感器(专题二):从加速度计到指南针,玩转硬件能力
学习·华为·harmonyos