信息学奥赛|常见排序算法总结(C+) - 腾讯云开发者社区-腾讯云 (tencent.com)
https://cloud.tencent.com/developer/news/975232
常用序号层级排序
一、序号
序号Sequence Number,有顺序的号码,如数字序号(1、2、3...),大写汉字数字序号(一、二、三...)
正确地运用序号,能使我们的文章层次清楚,逻辑分明,便于阅读和引述。
在我们在写文章,特别是在写论文中经常会用到数字序号。如果不加以重视,文章中很容易出现层次大小不分、中文数字与阿拉伯数字混用、前后序号形式不统一等问题。
二、序号的结构层次顺序
(一)数字序号的级别顺序为:
第一层,汉字数字加顿号:“一、” “二、” “三、”;
第二层,括号中包含汉字数字:“(一)” “(二)” “(三)”;
第三层,阿拉伯数字加下脚点:“1. ”“2.”“3.”;
第四层,括号中包含阿拉伯数字:“(1)” “(2)” “(3)”;
第五层,带圈的阿拉伯数字,例如:“①” “②” “③”或者“1)” “2)” “3)”;
第六层,大写英文字母,例如:“A.” “B.” “C.”或者“(A)” “(B)” “(C)”;
第七层,小写英文字母,例如: “a.” “b.” “c.”或者“(a)” “(b)” “(c)”;
(二)理科类论文的正文层次标题序号
理科类论文的各层次标题还可用阿拉伯数字连续编码,不同层次的2个数字之间用下圆点(.)分隔开,末位数字后面不加点号。如“1”,“1.2”,“1.2.1”等;
各层次的标题序号均左顶格排写,最后一个序号之后空一个字距接排标题。如“5.3.2 测量的方法”,表示第五章第三节第二条的标题是“测量的方法”。
注意:同一层次各段内容是否列标题应一致,各层次的下一级序号标法应一致,若层次较少可不用若干加括号的序号。
(三)正文中图、表、公式、算式等的序号
1.正文中的图、表、公式、算式等序号一律用阿拉伯数字分别依序连续编排序号,其标注形式应便于互相区别,如“图1、表2、式(5)”等;
图片取自论文《基于约束最小二乘的三维点云墙体重建》(周刚、李霖)
2.对长篇研究报告也可以分章(条)依序编码,如“图2.1、表4.2、式(3.3)”等,其前一个数字表示章(条)序号,后一个数字表示本章中图表、公式的序号。
图片取自书籍《ArcGIS地理信息系统教程》(原书第7版)
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
计算机综合基础知识记录(408、面试) - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/626540048
qtreeview 某一列排序 1 1-1 1-1-1
为了在QTreeView的某一列上进行排序,你可以使用QTreeView的sortByColumn()方法,并且可能需要重写QTreeView的sectionClicked信号处理函数。
以下是一个简单的例子,展示了如何对QTreeView的某一列进行排序。
from PyQt5.QtWidgets import QApplication, QTreeView, QTableWidgetItem, QHeaderView, QAbstractItemView
from PyQt5.QtCore import Qt, QModelIndex, QSortFilterProxyModel, QStringListModel
class CustomSortProxyModel(QSortFilterProxyModel):
def lessThan(self, left: QModelIndex, right: QModelIndex) -> bool:
left_data = left.data()
right_data = right.data()
# 对数据进行自定义排序规则
# 这里是按照数字、短横线数字、短横线数字短横线的顺序进行排序
def split_items(item):
return item.split('-')
left_parts = split_items(left_data)
right_parts = split_items(right_data)
for i in range(min(len(left_parts), len(right_parts))):
left_part = left_parts[i]
right_part = right_parts[i]
try:
# 尝试转换为整数,进行数字比较
left_num = int(left_part)
right_num = int(right_part)
if left_num != right_num:
return left_num < right_num
except ValueError:
# 如果不是整数,就直接比较字符串
if left_part != right_part:
return left_part < right_part
# 如果前面部分都相同,则比较部分的长度
return len(left_parts) < len(right_parts)
def main():
app = QApplication([])
model = QStringListModel()
data = ["1", "1-1", "1-1-1", "2", "2-1", "2-2", "3", "3-1", "3-1-1"]
model.setStringList(data)
tree = QTreeView()
tree.setModel(model)
# 设置代理模型以实现自定义排序
proxy_model = CustomSortProxyModel()
proxy_model.setSourceModel(model)
tree.setModel(proxy_model)
# 设置第一列可排序
tree.sortByColumn(0, Qt.AscendingOrder)
tree.header().setSectionResizeMode(QHeaderView.ResizeToContents)
tree.setEditTriggers(QAbstractItemView.NoEditTriggers)
tree.show()
app.exec_()
if __name__ == '__main__':
main()
在这个例子中,我们创建了一个QTreeView来展示一个字符串列表。我们定义了一个CustomSortProxyModel类,它重写了lessThan方法来实现自定义的排序逻辑。这里的逻辑是尝试将每个条目分割成部分,并尝试将每个部分转换为整数进行比较,如果转换失败则直接比较字符串。这样就可以按照数字、短横线数字、短横线数字短横线…的顺序进行排序。当你点击列头时,QTreeView会自动调用sortByColumn方法进行排序,并使用我们定义的CustomSortProxyModel来实现自定义的排序逻辑。
44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
https://blog.csdn.net/in_void/article/details/111720221
C++数据结构的一些代码(排序部分)_c++利用结构体排序插入代码l-CSDN博客
555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
排序算法原理及C++实现(桶排序、冒泡排序、快速排序) - 知乎 (zhihu.com)
排序算法原理及C++实现(桶排序、冒泡排序、快速排序) - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/431933290
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
https://www.cnblogs.com/starboy/p/11693675.html
C++|关于各种排序的总结 - =Icarus= - 博客园 (cnblogs.com)
777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
1 1-1 1-1-1 排序 C++
要对这种格式的数字字符串进行排序,我们可以将它们分割为子串,并将每个子串转换为数字,然后比较数字的大小。以下是一个C++函数,它接受一个字符串向量作为输入,并按照这种格式的数字大小对其进行排序。
#include <iostream>
#include <vector>
#include <algorithm>
bool compareVersion(const std::string& a, const std::string& b) {
std::vector<int> a_version, b_version;
int num = 0;
for (char c : a) {
if (c == '-') {
a_version.push_back(num);
num = 0;
} else if (c >= '0' && c <= '9') {
num = num * 10 + (c - '0');
}
}
a_version.push_back(num);
num = 0;
for (char c : b) {
if (c == '-') {
b_version.push_back(num);
num = 0;
} else if (c >= '0' && c <= '9') {
num = num * 10 + (c - '0');
}
}
b_version.push_back(num);
for (size_t i = 0; i < a_version.size() && i < b_version.size(); ++i) {
if (a_version[i] < b_version[i]) return true;
if (a_version[i] > b_version[i]) return false;
}
return a_version.size() < b_version.size();
}
int main() {
std::vector<std::string> versions = {"1-1", "1-1-1", "1-1-2", "1-2", "2-1", "2-2"};
std::sort(versions.begin(), versions.end(), compareVersion);
for (const auto& version : versions) {
std::cout << version << std::endl;
}
return 0;
}
这段代码定义了一个compareVersion
函数,它将字符串版本号分割为子版本号,并将它们转换为整数,然后按照从左到右的顺序比较它们。main
函数中的代码展示了如何使用这个比较函数对版本号数组进行排序。