# 概述
---
##### 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
##### 我们这里说说八大排序就是内部排序。
![](https://box.kancloud.cn/4097d5d86145141fcb6a5ecff0fbc3bc_528x363.jpg)
当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。
快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
## 1.插入排序—直接插入排序(Straight Insertion Sort)
### 基本思想:
将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
要点:设立哨兵,作为临时存储和判断数组边界之用。
直接插入排序示例:
![](https://box.kancloud.cn/92f5a1e0cf1258186b6e118da21247cc_500x249.jpg)
如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。
### 算法的实现:
package com;
public class InsertSort {
public static void main(String[] args) {
int a[] = {3,1,5,7,2,4,9,6,10,8};
InsertSort obj=new InsertSort();
System.out.println("初始值:");
obj.print(a);
obj.insertSort(a);
System.out.println("\n排序后:");
obj.print(a);
}
public void print(int a[]){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
public void insertSort(int[] a) {
for(int i=1;i<a.length;i++){//从头部第一个当做已经排好序的,把后面的一个一个的插到已经排好的列表中去。
if(a[i]<a[i-1]){
int j;
int x=a[i];//x为待插入元素
a[i]=a[i-1];
for(j=i-1; j>=0 && x<a[j];j--){//通过循环,逐个后移一位找到要插入的位置。
a[j+1]=a[j];
} ``
a[j+1]=x;//插入
}
}
}
}
- 说明
- 《Java 基础》
- 第01章 Java 概述
- 第02章 Java 语言语法
- 第03章 Java 面向对象编程
- 第04章 Java 常见API
- 第05章 Java 集合框架
- 第06章 Java 多线程和并发
- 第07章 Java I\O流
- 第08章 Java 网络编程
- 第09章 Java 数据结构
- 第10章 Java 设计模式
- 《Android 基础》
- 第00章 Android Studio 中的项目结构
- 第01章 AndroidManifest
- 第02章 UI
- 第03章 Activity
- 第04章 Service
- 第05章 BroadcastReceiver
- 第06章 ContentProvider
- 第07章 Intent
- 第08章 多线程
- 《数据库基础》
- 第01章 SQL 语句基础
- 第02章 SQLite 基础
- 《数据结构》
- chapter 1
- 《算法》
- chapter 1
- 《网络基础》
- 面试常见网络知识解答
- 1.1.网络协议简介
- 1.2.
- 1.3.
- 1.4.
- 1.5.
- 《项目经验》
- 序言
- 公司项目
- 开源项目
- 自有项目
- 《回首与展望》
- 《开始的地方》
- 1.初识计算机
- 2.时刻准备着
- 《在路上》
- 1.最寒冷的冬天
- 2.做了一回鸟人
- 3.5月出租屋
- 4.魔都
- 5.回长安
- 6.炼狱
- 7.最后的路
- 《遇到的坑》
- 《正在做的事》
- 《未来》
- 附录 1:10大基础算法
- 1.快速排序算法
- 2.堆排序算法
- 3.归并排序
- 4.二分查找算法
- 5.BFPRT(线性查找算法)
- 6.DFS(深度优先搜索)
- 7.BFS(广度优先搜索)
- 8.Dijkstra算法
- 9.动态规划算法
- 10.朴素贝叶斯分类算法
- 附录 2:面试常考算法
- 第1章 常考排序算法
- 1.1.冒泡排序
- 1.2.快速排序
- 第2章 常考搜索算法
- 2.1.二分查找
- 附录 3:Java八大排序算法
- 最后的话