c学习笔记 20210228

@[TOC] 20210228

字符串排序

#include <stdio.h>
#include <string.h>
#define SIZE 81
#define LIM 20
#define HALT ""

void stsrt(char* strings[], int num);

int main(void)
{
	char input[LIM][SIZE];
	char* ptstr[LIM]; //指针数组
	int ct = 0;
	int k;

	printf("Input up to %d lines, and I will sort them.\n", LIM);
	printf("To stop, press the Enter key at a line's start.\n");
	while (ct < LIM && s_gets(input[ct], SIZE) != NULL && input[ct][0] != '\0')
	{
		ptstr[ct] = input[ct];
		ct++;
	}
	stsrt(ptstr, ct);
	puts("\nHere's the sorted list:\n");
	for (k = 0; k < ct; k++)
		puts(ptstr[k]);
	return 0;
}

void stsrt(char* strings[], int num)
{
	char* temp;
	int top, seek;

	for (top = 0; top < num - 1; top++)
		for (seek = top + 1; seek < num; seek++)
			if (strcmp(strings[top], strings[seek]) > 0)
			{
				temp = strings[top];
				strings[top] = strings[seek];
				strings[seek] = temp;
			}
}

这里strcmp()函数通过字符串比较,利用其返回值完成排序,排序方法为选择排序算法(selection sort algorithm)。
其中自定义的s_gets()函数, 若输入空行, 则输入的回车被替换为“\0”
input[ct][0] 用于检测空行

排序指针而非字符串

指针ptrst[i] 指向数组input[i]的首字符, 排序过程仅改变了ptrst的排列,input仍保留其原始顺序

选择排序算法

利用两层for循环, 外层确定“首元素”, 内层将首元素与每个元素进行比较, 内层循环结束时, 首元素包含的指针指向机器排序序列最靠前的(人话:最值将会排到第一个/最后一个的位置), 随后外层循环重复该过程, 持续到所有元素排序完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值