1、初入修仙界

1.开始我真正意义上的第一次实习, 还是在北上广深的大城市。刚开始车站的一碗混沌让我记忆尤其深刻,这就是大城市的物价,啧啧啧。。。

2.刚开始一个人在工位上,只能看着其他人忙碌的身影,让我感到毫无游戏体验,就好像韩劳模看着大战后的其他修士捡尸一样,我下定决心要努力学习,学长说我要学的东西还很多,必须加油了。

3.第一天也没做什么,重写了一遍当时的笔试试卷,结果还是会写的能写,不会写还是不会写。

加个C语言实现的延迟函数吧。

#include <stdio.h>
#include <time.h>

void delay(const int seconds) {
	// 记录当前时钟时间 
	clock_t start_time = clock();
	//得到延迟结束的时钟时间 
	//CLOCKS_PER_SEC为定义的宏/macro, 其值为1000,可以将其秒/sec转化为clock()的返回值
	clock_t end_time = seconds * CLOCKS_PER_SEC + start_time;
    /*clock()函数在VS2022找不到定义,返回从关联到进程开始执行的实现定义时期的起,进程所用的粗略                            
    处理器时间。将此值除以 CLOCKS_PER_SEC 可转换为秒。使用clock_t/long表示*/
	while (clock() < end_time); // 空循环等待 
	// 调用延迟函数,延迟10秒 
	printf("延迟结束!\n");
}

int main() {
    //打印测试结果
    int seconds = 10;
    printf("开始延迟%d...\n", seconds);
    //延迟十秒,单位:秒/s
    delay(seconds);
    return 0;
}

延迟函数整体的时间复杂度是 O(n),空间复杂度为O(1)

4.再来个堆排序

#include <stdio.h>
#include <assert.h>

//swap:交换a,b两数的函数
void swap(char* a, char* b) {
	char t = *a;
	*a = *b;
	*b = t;
}

void heapify(char* arr, const int start, const int end) {
	assert(arr != NULL);
	if (start >= end) return;
	int dad = start;
	int son = 2 * dad + 1;
	while (son <= end) {
		if (son + 1 <= end && arr[son + 1] > arr[son]) {
			++son;
		}
		if (arr[dad] > arr[son]) return;
		swap(&arr[dad], &arr[son]);
		dad = son;
		son = 2 * dad + 1;
	}
}


void heap_sort(char* arr, const int len) {
	assert(arr != NULL);
	if (len < 2) return;
	//完全二叉树公式: son = 2 * dad + 1 or son = 2 * dad + 2;
	//求dad: dad = (son - 1) / 2
	for (int i = (len - 1) / 2; i >= 0; --i) {
		heapify(arr, i, len - 1);
	}

	for (int i = len - 1; i > 0; --i) {
		swap(&arr[0], &arr[i]);
		//每次排完最大那个节点,数组尾部下标减一
		heapify(arr, 0, i - 1);
	}
}


void display(const char* arr, const int len) {
	assert(arr != NULL);
	for (int i = 0; i < len; ++i) {
		printf("arr[%d]: %c ", i, arr[i]);
	}
	printf("\n");
}

int main() {
    char arr[] = {10, 9, 8, 7, 5, 6, 3, 4, 1, 1};
    printf("调用堆排序\n");
    //数组长度,最好使用const修饰
    const int len = sizeof(arr) / sizeof(arr[0]);
    heap_sort(arr, len);
    //打印数组
    display(arr, len);
    return 0;
}

堆排序包括建堆和排序两个操作,建堆过程的时间复杂度是 O(n),排序过程的时间复杂度是 O(nlogn),所以,堆排序整体的时间复杂度是 O(nlogn),空间复杂度为O(1)

5.小bug:

int cmp(const void* a, const void* b) {
	return *(char*)a - *(char*)b;
}

qsort(arr, len, sizeof(char), cmp);//注意函数参数列表。已解决。

调用swap使用tmp额外临时变量更好,不容易出错。使用a + b 宏对char数组不行,未解决。

VS2022调用scanf()等不安全函数在文件最上面加_CRT_SECURE_NO_WARNINGS 宏/macro,告诉编译器忽略相关的警告信息。但为什么一定在文件最上面添加?还未解决。

今天先到这里吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值