第4关:书籍排序

题目:

C&C++结构体 (educoder.net)

 

 

思路: 

1.字符串字典序排序---> 利用string.h里面的strcmp,由其返回值确定两字符串大小。(p=strcmp(a,b),若p>1,则a字典序大于b。)

2.当不能定义字符串string时,只能用字符数组来容纳字符串。但字符数组不可以向string定义的字符串那样用cin一次性输入,需要for循环一个字符一个字符的cin,太复杂了,故这里我们用cin.getline(arr,len)一次性输入一行字符(这样就相当于输入一个字符串了)。

3.特别注意:在每次cin.getline之前要用getchar()吸收掉前面cin结束后留下的回车符!

代码: 

#include <string.h>
#include <iostream>
using namespace std;
typedef struct _book
{
	float price;
	char name[50];
}mybook;

int main()
{
	int n,i,j,min;
	mybook book[55];
	cin >> n;
	
	for (i = 0; i < n; i++) {
		getchar(); //!!!!吸收掉上面 cin>>n 时输入的回车符号
		cin.getline(book[i].name, 55);//name被定义为字符而非字符串,不可以只通过一个cin输入,故用getline
		cin>> book[i].price; 
	}
	//选择排序
	for (i = 0; i < n-1; i++) {
		min = i;
		for (j = i + 1; j < n; j++) {
			if (book[j].price < book[min].price)min = j;
			//在价格相等的情况下比较书名字典序--->字符串比字典序用strcpy
			else if (book[min].price == book[j].price && strcmp(book[min].name, book[j].name)>0)min = j;
		}
		//交换(结构体可以理解多赋值,直接赋值不用重载"=")
		if (min != i) {
			mybook t;
			t = book[min];
			book[min] = book[i];
			book[i] = t;
		}
	}
	//输出
	for (i = 0; i < n; i++)cout << book[i].price << ", " << book[i].name << "\n";
}

  • 19
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
快速排序算法是一种高效的排序算法,它在基于Python的图书信息管理系统中有着广泛的应用。本文将介绍快速排序算法的基本原理、实现过程以及在图书信息管理系统中的应用。 一、快速排序算法的基本原理 快速排序算法是一种分治法排序算法,其基本原理是将待排序序列分成两个子序列,一部分比基准值小,一部分比基准值大。然后对两个子序列分别进行快速排序,直到整个序列有序为止。 具体而言,快速排序算法的实现过程如下: 1. 选择一个基准元素(通常是待排序序列的第一个元素)。 2. 将序列中所有小于基准元素的元素移动到基准元素的左边,所有大于基准元素的元素移动到基准元素的右边。 3. 对基准元素的左右两个子序列分别递归进行快速排序。 4. 递归结束后,整个序列就变成了有序序列。 二、快速排序算法的实现过程 在Python中,实现快速排序算法主要有两种方法:递归和迭代。下面分别介绍这两种方法的实现过程: 1.递归实现 递归实现快速排序算法的核心代码如下: ``` def quick_sort_recursive(arr): if len(arr) <= 1: return arr else: pivot = arr[0] left = [x for x in arr[1:] if x < pivot] right = [x for x in arr[1:] if x >= pivot] return quick_sort_recursive(left) + [pivot] + quick_sort_recursive(right) ``` 其中,arr表示待排序的数组。递归的过程是不断将序列分成左右两个子序列,并对子序列进行递归排序,最终合并成一个有序序列。 2.迭代实现 迭代实现快速排序算法的核心代码如下: ``` def quick_sort_iterative(arr): stack = [(0, len(arr) - 1)] while stack: low, high = stack.pop() if low < high: pivot = arr[low] i, j = low, high while i < j: while i < j and arr[j] >= pivot: j -= 1 arr[i] = arr[j] while i < j and arr[i] < pivot: i += 1 arr[j] = arr[i] arr[i] = pivot stack.append((low, i - 1)) stack.append((i + 1, high)) return arr ``` 其中,arr表示待排序的数组。迭代的过程与递归类似,也是不断将序列分成左右两个子序列,并将子序列的左右边界入栈,直到整个序列有序为止。 三、快速排序算法在图书信息管理系统中的应用 快速排序算法在图书信息管理系统中的应用场景非常广泛,主要包括以下几个方面: 1.图书排序 系统可以根据图书的某一属性(如书名、作者、出版日期等)进行排序,快速排序算法可以帮助系统快速对图书信息进行排序,并提高操作效率。 2.图书推荐 系统可以根据用户的借阅历史和阅读偏好,推荐适合用户的图书。快速排序算法可以帮助系统快速对图书信息进行排序,并提高推荐结果的准确性。 3.图书统计 系统可以根据图书的某一属性(如分类、作者、出版社等)进行统计分析,快速排序算法可以帮助系统快速对图书信息进行排序,并提高统计结果的准确性。 四、总结 快速排序算法是一种非常高效的排序算法,它可以帮助图书信息管理系统实现高效的排序、推荐和统计功能。本文介绍了快速排序算法的基本原理、实现过程以及在图书信息管理系统中的应用,希望能够对读者理解和应用快速排序算法有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hz2.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值