互联网面试笔记
应用介绍
排序算法汇总
## 一. 插入排序
### 1.直接插入排序
- **思想**:每次将一个待排序的数据按照其关键字的大小插入到前面已经排序好的数据中的适当位置,直到全部数据排序完成。
- **时间复杂度**:O(n^2) O(n) O(n^2) (最坏 最好 平均)
- **空间复杂度**:O(1)
- **稳定性**: 稳定 每次都是在前面已排好序的序列中找到适当的位置,只有小的数字会往前插入,所以原来相同的两个数字在排序后相对位置不变。
```
// 插入排序
public static void insertSort(int[] array) {
for (int i = 2; i < array.length; i++ ) {
int val = array[i];
int j = i -1;
while (j >= 0 && array[j] > val) { // array[j] > val
array[j+1] = array[j];
j--;
}
array[j+1] = val; // array[j+1] 不是array[j]
}
}
```
### 2.希尔排序
- **思想**:希尔排序根据增量值对数据按下标进行分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整体采用直接插入排序得到有序数组,算法终止。
- **时间复杂度**:O(n2) O(n) O(n1.5) (最坏,最好,平均)
- **空间复杂度**:O(1)
- **稳定性**:不稳定 因为是分组进行直接插入排序,原来相同的两个数字可能会被分到不同的组去,可能会使得后面的数字会排到前面,使得两个相同的数字排序前后位置发生变化。
- **不稳定举例**: 4 3 3 2 按2为增量分组,则第二个3会跑到前面
```
public static void shellSort(int[] array) {
int len;
len = array.length / 2; // 分成n/2组
while (len >= 1) {
for (int i = len; i < array.length; ++i) { //对每组进行直接插入排序
int temp = array[i];
int j = i - len;
while (j >= 0 && array[j] > temp) {
array[j + len] = array[j];
j -= len;
}
array[j + len] = temp;
}
len /= 2;
}
}
```
## 二. 交换排序
### 3.冒泡排序
- **思想**:对待排序元素的关键字从后往前进行多遍扫描,遇到相邻两个关键字次序与排序规则不符时,就将这两个元素进行交换。这样关键字较小的那个元素就像一个泡泡一样,从最后面冒到最前面来。
- **时间复杂度**:最坏:O(n2) 最好: O(n) 平均: O(n2)
- **空间复杂度**:O(1)
- **稳定性**:稳定,相邻的关键字两两比较,如果相等则不交换。所以排序前后的相等数字相对位置不变。
```
public static void bubbleSort(int[] array) {
boolean flag; // 用来判断当前这一轮是否有交换数值,若没有则表示已经排好许了
for (int i = 0; i < array.length; i++) {
flag = false;
/**
* 这边要注意 for (int j = array.length -1; j >= i + 1; j--)。 不要写成
* for (int j = i + 1; j < array.length ; j++)
*/
for (int j = array.length -1; j >= i + 1; j--) {
if (array[j -1 ] > array[j]) {
//数据交换
int temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
//设置标志位
flag = true;
}
}
if (!flag) {
break;
}
}
}
```
。。。。。。。。想了解详情请下载附件。
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: www_apollocode_net@163.com 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » 互联网面试笔记
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
leetCode_go.md | 0.36 KB | 2020-09-08 |
offer_java.md | 4.78 KB | 2020-08-24 |
section01.md | 3.74 KB | 2020-08-24 |
section02.md | 8.20 KB | 2020-09-08 |
string.md | 4.16 KB | 2020-09-08 |
tu.md | 1.71 KB | 2020-08-24 |
beans.png | 358.40 KB | 2020-08-24 |
bg.jpg | 201.37 KB | 2020-08-24 |
collection_compare.png | 299.59 KB | 2020-08-24 |
java_collection.png | 70.58 KB | 2020-08-24 |
spring.png | 654.14 KB | 2020-08-24 |
weix_gongzhonghao.jpg | 21.49 KB | 2020-08-24 |
redis.md | 10.26 KB | 2020-09-08 |
all.md | 8.27 KB | 2020-09-08 |
mysql.md | 4.65 KB | 2020-08-24 |
sql.md | 6.94 KB | 2020-09-08 |
SQL语句汇总.md | 4.36 KB | 2020-09-08 |
hibernate.md | 5.50 KB | 2020-09-08 |
spring.md | 14.72 KB | 2020-09-08 |
struts.md | 7.46 KB | 2020-09-08 |
web.md | 0.64 KB | 2020-08-24 |
跳槽HR问题.md | 0.56 KB | 2020-09-08 |
15262672735241.jpg | 87.52 KB | 2020-08-24 |
15262674498084.jpg | 217.93 KB | 2020-08-24 |
15262725012092.jpg | 159.25 KB | 2020-08-24 |
15262727479347.jpg | 196.56 KB | 2020-08-24 |
15262727709415.jpg | 42.27 KB | 2020-08-24 |
15262741159390.jpg | 69.67 KB | 2020-08-24 |
15262742098959.jpg | 73.54 KB | 2020-08-24 |
15262744168004.jpg | 131.18 KB | 2020-08-24 |
发表评论 取消回复