插入排序算法
2021/6/6 1:21:07
本文主要是介绍插入排序算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
插入排序是一种简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。
具体实现
- 实现类
public class InsertionSort { /** * 私有构造函数,该类不被别人创建,直接使用该类的sort函数 */ private InsertionSort () {} /** * 插入排序算法 * @param arr * @param <T> */ public static <T extends Comparable<T>> void sort (T[] arr) { for (int i = 0; i < arr.length; i++) { // 将 arr[i] 插入到合适的位置 for (int j = i; j > 0; j--) { if (arr[j].compareTo(arr[j - 1]) < 0) { swap(arr, j, j-1); } } } } /** * 插入排序算法优化 * 记录插入元素,只进行一次赋值 * @param arr * @param <T> */ public static <T extends Comparable<T>> void sortOptimize (T[] arr) { for (int i = 0; i < arr.length; i++) { // 暂存arr[i],如果arr[i]小于arr[j-1],则将arr[j-1]后移,最后赋值j T t = arr[i]; int j; for (j = i; j > 0 && t.compareTo(arr[j - 1]) < 0; j--) { arr[j] = arr[j - 1]; } arr[j] = t; } } /** * 交换元素位置 * @param arr * @param i * @param j */ private static <T> void swap (T[] arr, int i, int j) { T t = arr[i]; arr[i] = arr[j]; arr[j] = t; } public static void main(String[] args) { /** * 测试一 */ Integer[] arr = {3, 5, 7, 1, 2, 4, 9, 8, 6}; InsertionSort.sort(arr); for (int i : arr) { System.out.println(i); } /** * 测试二 自定义类 */ Student[] students = { new Student("张三", 88), new Student("李四", 77), new Student("王二", 99), new Student("刘一", 55) }; InsertionSort.sort(students); for (Student student : students) { System.out.println(student.toString()); } } }
- 自定义测试类
public class Student implements Comparable<Student>{ private String name; private int score; public Student(String name, int score) { this.name = name; this.score = score; } /** * 重写compareTo方法 * @param another * @return */ @Override public int compareTo (Student another) { // 从小到大排序 return this.score - another.score; // 从大到小排序 // return another.score - this.score; } /** * 重写toString方法 * @return */ @Override public String toString () { return String.format("Studen(name: %s, socre: %d)", this.name, this.score); } }
.end
这篇关于插入排序算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南
- 2024-12-21功能权限实战:新手入门指南