zoukankan
html css js c++ java
插入排序之直接插入排序
直接插入排序
时间复杂度O(n^2)
附加空间O(1)
稳定排序
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #define LEN 8 // 有LEN个元素要排 struct Record { // 为了考察排序的稳定性,定义元素是结构体类型 int key; int otherinfo; }; void InsertSort(Record *arr, int length) // length是要排序的元素的个数,0号单元除外 { for (int i = 2; i <= length; i++) { if (arr[i - 1].key > arr[i].key) { // 若判断时改为>=,则是不稳定排序,下同 arr[0] = arr[i]; arr[i] = arr[i - 1]; int j; for (j = i - 2; arr[j].key > arr[0].key; j--) arr[j + 1] = arr[j]; arr[j + 1] = arr[0]; } } } int main(void) { freopen("in.txt", "r", stdin); Record a[LEN + 1] = {0}; for (int i = 1; i <= LEN; i++) cin >> a[i].key >> a[i].otherinfo; InsertSort(a, LEN); for (int i = 1; i <= LEN; i++) cout << a[i].key << '\t' << a[i].otherinfo << endl; return 0; } /* in.txt: 49 1 38 0 65 0 97 0 76 0 13 0 27 0 49 2 out: 13 0 27 0 38 0 49 1 49 2 65 0 76 0 97 0 */
若排序的函数写成下面这样:
void InsertSort(Record *arr, int length) // length是要排序的元素的个数,0号单元除外 { for (int i = 2; i <= length; i++) { arr[0] = arr[i]; // 当当前比较的元素比前一个大时(前面的都已排好序),可直接continue,以免复制去又复制来 int j; for (j = i - 1; arr[j].key > arr[0].key; j--) arr[j + 1] = arr[j]; arr[j + 1] = arr[0]; } }
代码是简洁了些,但有些微妙的缺陷,如注释所示。
比如排
12 27
用第二种要浪费两次复制。
查看全文
相关阅读:
Linux PXE无人值守网络装机
Linux 自动化部署DNS服务器
Linux DNS服务配置
Mysql数据库基础学习笔记
Linux AIDE(文件完整性检测)
mysql:[Err] 1068
sql的date、时间函数、时间戳
hive之建立分区表和分区
excel转sql代码
spark-submit之使用pyspark
原文地址:https://www.cnblogs.com/jjtx/p/2533471.html
最新文章
Django 模版语法 三
Django extend(继承)模板标签
K8S 上搭建 Redis
MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sync_binlog
Django 模版语法 二
MSSQL中 数值类型转换为千分号的解决方案
mssql 系统函数-字符串函数专题--字符串函数大全
mssql sql server 其它系统函数 parsename 点语法字符串分割函数应用简介
mssql sql server上如何建一个只读视图–视图锁定的另类解决方案
IOS UIWebView用法
热门文章
linux alias 用法
linux命令之df
linux 中双横杠和单横杠命令选项的区别
linux下objdump应用
如何实现javascript js 类命名空间的写法
Linux常见系统故障
Linux 通过编译安装apache服务以及配置
linux FTP安全配置
Linux Mysql数据库安全配置
Linux shell编写脚本部署pxe网络装机
Copyright © 2011-2022 走看看