排序总结---插入排序

本文详细介绍了一种简单的排序算法——插入排序。通过逐步解析插入排序的工作原理及其实现过程,包括如何将未排序部分的元素逐个插入到已排序部分的正确位置。适用于初学者理解基本的排序算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//
// Created by liyuanshuo on 2017/3/17.
//

#include "Insertion_sort.h"

//a[] unsort array
//n --- total numbers of element in array

//1.从第一个元素开始,该元素可以认为是已经被排序
//2.取出下一个元素,在已经排序的元素序列从后向前扫面
//3.如果该元素(已排序)大于新的元素,将该元素向后移动一位
//4.重复步骤3,直至找到已经排序的元素小于或者等于新元素的位置
//5.将新元素插入到该位置
//6.重复步骤2

void insertion_sort( int a[], int n )
{
	for (int i = 1; i < n; ++i)
	{
		if( a[i] < a[i-1] )
		{
			int j = i - 1;
			int x = a[i];
			a[i] = a[i-1];
			while ( x < a[j] )
			{
				a[j+1] = a[j];
				j--;
			}
			a[j+1] = x;
		}
	}
}

### 插入排序算法在CSP-J考试中的考点与实现 #### 一、插入排序基本原理 插入排序是一种简单直观的比较类排序方法,其核心思想是通过构建有序序列逐步完成整个列表的排序。对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入[^1]。 以下是插入排序的核心特点: - 时间复杂度为 \(O(n^2)\),适用于小型数据集。 - 是一种稳定的排序算法- 需要额外的空间开销较小,属于原地排序算法--- #### 二、CSP-J考试中涉及的知识点 根据 CSP-J 的初赛和复赛大纲以及相关参考资料[^4],以下是一些可能考察的内容: 1. **时间复杂度分析** - 掌握插入排序的时间复杂度计算方式及其适用场景。 - 对于最坏情况下的性能表现有清晰的认识(即逆序排列时达到 \(O(n^2)\))。 2. **空间复杂度理解** - 明确插入排序不需要额外分配大量内存资源,仅需常数级辅助存储单元即可完成操作。 3. **稳定性判断** - 学生应能够解释为什么插入排序一个稳定排序算法,并能举例说明这一特性的重要性。 4. **实际应用案例** - 结合具体题目背景设计基于插入排序的应用解决方案,比如处理简单的数组或链表排序问题。 5. **调试技巧** - 在竞赛环境中可能出现由于语法错误或其他原因引起的编译失败现象;因此熟悉如何正确编写代码非常重要^。 --- #### 三、插入排序的具体实现 (C++ 和 Python) ##### (1)C++ 实现版本 ```cpp #include <iostream> using namespace std; void insertionSort(int arr[], int n){ for(int i=1;i<n;i++){ int key = arr[i]; int j=i-1; while(j>=0 && arr[j]>key){ // 找到合适的位置 arr[j+1]=arr[j]; // 向右移动元素 j--; } arr[j+1]=key; // 插入当前值 } } int main(){ int data[] = {9, 5, 1, 4, 3}; int size = sizeof(data)/sizeof(data[0]); cout << "Original array: "; for(auto num:data) cout<<num<<" "; insertionSort(data,size); cout<<"\nSorted array : "; for(auto num:data) cout<<num<<" "; return 0; } ``` ##### (2)Python 实现版本 ```python def insertion_sort(arr): for i in range(1, len(arr)): key = arr[i] j = i - 1 # 将大于key的元素向右移动一位 while j >= 0 and arr[j] > key: arr[j + 1] = arr[j] j -= 1 # 插入key至正确位置 arr[j + 1] = key if __name__ == "__main__": data = [9, 5, 1, 4, 3] print("Original list:", data) insertion_sort(data) print("Sorted list :", data) ``` 上述两段代码分别展示了用 C++ 和 Python 编写的标准插入排序逻辑。学生可以通过练习这些代码来加深对算法的理解[^3]^。 --- #### 四、注意事项 参加 CSP-J 考试的学生需要注意以下几点事项以避免不必要的失分风险: - 提交源码前务必确认无任何警告信息存在; - 使用官方指定开发工具进行测试验证; - 如果遇到无法解决的技术难题,则尝试查阅随身携带的手册资料寻求帮助^。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值