排序算法之选择排序和插入排序
来源:互联网 发布:minila air mac 编辑:程序博客网 时间:2024/06/05 03:41
排序算法之选择排序和插入排序
本篇文章是学习《算法导论》的笔记。
1. 问题描述
问题描述:
输入:n个数的一个序列<a1,a2,...,an> 。
输出:输入序列的一个排列<a′1,a′2,...,a′n> ,满足a′1≤a′2...≤a′n 。
1.1 插入排序
1.1.1 伪码表示
Insertion_sort(A)1 for j = 2 to A.length2 key = A[j]3 //Insert A[j] into the sorted sequence A[1..j-1]4 i = j - 15 while i > 0 and A[i] > key6 A[i+1] = A[i];7 i = i - 18 A[i+1] = key
1.1.2 插入排序的示例图
如下图所示,在数组
1.2 选择排序
1.2.1 伪码表示
Selection_sort(A)1 for j = 0 to A.length2 min = j4 for i = j + 1 to A.length5 if A[i] < A[min]6 min = i7 exchange(A[j], A[min])
1.3 Java实现
public class Sort { //选择排序 public static void selection_sort(Comparable[] a) { int N = a.length; for (int i = 0; i < N; i++) { int min = i; for (int j = i+1; j < N; j++) if (less(a[j], a[min])) min = j; exch(a, i, min); } } //插入排序 public static void insertion_sort(Comparable[] a) { int N = a.length; for (int i = 1; i < N; i++) { for (int j = i; j > 0; j--) { if (less(a[j-1], a[j])) break; exch(a, j, j-1); } } } private static boolean less(Comparable v, Comparable w) { return v.compareTo(w) < 0; } private static void exch(Comparable[] a, int i, int j) { Comparable t = a[i]; a[i] = a[j]; a[j] = t; } private static void show(Comparable[] a) { for (int i = 0; i < a.length; i++) System.out.print(a[i]+" "); System.out.println(); } public static boolean isSorted(Comparable[] a) { for (int i = 1; i < a.length; i++) if(less(a[i], a[i-1])) return false; return true; } public static void main(String[] args) { Integer[] a = {12, 3, 24, 5, 18, 15, 9, 10}; insertion_sort(a); assert isSorted(a); show(a); }}
阅读全文
0 0
- 排序算法之二-选择排序和插入排序
- 排序算法之选择排序和插入排序
- 排序算法之“选择排序-冒泡排序-插入排序”
- 经典排序算法之冒泡、选择和插入排序
- 排序算法之选择和插入排序的简单优化
- 算法之插入排序与选择排序
- C++排序算法之选择、插入排序
- 算法学习--选择排序和插入排序
- 常用内部排序算法之四:简单选择排序、直接插入排序和冒泡排序
- 简单排序算法之选择排序、直接插入排序和冒泡排序
- 排序算法之直接插入排序、选择排序和冒泡排序
- (九)数据结构之简单排序算法实现:冒泡排序、插入排序和选择排序
- 简单排序算法之插入排序、选择排序和冒泡排序
- Java简单算法之 冒泡排序 选择排序 插入排序
- 排序算法总结之插入排序、选择排序
- java算法之冒泡排序、选择排序、插入排序
- 排序算法笔记_____2(选择排序和插入排序)
- 排序算法-选择排序和插入排序比较(待续未完)
- oracle tree
- android设备上截图保存到电脑上
- 动态链接项目DLL与静态链接项目LIB的构建和使用区别
- Servlet(一)
- bzoj1226 学校食堂
- 排序算法之选择排序和插入排序
- Spring中文文档翻译Integration Testing(2)
- 【Linux内核设计与实现】Linux内核简介
- 安卓电话和网络开发全解:电话硬件检测、电话服务信息、sim信息、网络服务信息、数据连接和数据传输信息、电话状态监听
- 20.find — find常用参数的一些常用实例
- 第三天:pycharm程序传递、快捷键和调试
- winXP右键菜单添加“打开所在文件夹”功能
- day03-easyUI中messager对象方法及menubutton菜单使用
- Windows环境下安装Tensorflow