【复习笔记】手写三种O(n^2)的基础排序算法
2017-08-09 20:14
295 查看
1.冒泡排序,稳定排序。
public static void bubbleSort(int [] array){
int len = array.length;
for(int i = 0; i < len - 1; ++i){
boolean canBreak = true;
for(int j = 0; j < len - i - 1; ++j){
if(array[j] > array[j + 1]){
canBreak = false;
swap(j, j + 1, array);
}
}
if(canBreak) break;
}
}
2.插入排序,稳定排序。且当元素数组接近有序时,性能较好,为O(n)
public static void insertSort(int [] array){
int len = array.length;
for(int i = len - 2; i >= 0; --i){
int insertIndex = -1;
for(int j = len - 1; j >= i; --j){
if(array[i] > array[j]){
insertIndex = j;
break;
}
}
if(insertIndex == -1) continue;
int temp = array[i];
for(int j = i; j < insertIndex; ++j){
array[j] = array[j + 1];
}
array[insertIndex] = temp;
}
}
3.选择排序,非稳定排序。复杂度基本上为O(n^2)不会变,因为总要遍历一遍去寻找最大值。
public static void chooseSort(int [] array){
int len = array.length;
for(int i = len - 1; i > 0; --i){
int maxIndex = 0;
for(int j = 0; j <= i; ++j){
if(array[j] > array[maxIndex])
maxIndex = j;
}
swap(maxIndex, i, array);
}
}
public static void bubbleSort(int [] array){
int len = array.length;
for(int i = 0; i < len - 1; ++i){
boolean canBreak = true;
for(int j = 0; j < len - i - 1; ++j){
if(array[j] > array[j + 1]){
canBreak = false;
swap(j, j + 1, array);
}
}
if(canBreak) break;
}
}
2.插入排序,稳定排序。且当元素数组接近有序时,性能较好,为O(n)
public static void insertSort(int [] array){
int len = array.length;
for(int i = len - 2; i >= 0; --i){
int insertIndex = -1;
for(int j = len - 1; j >= i; --j){
if(array[i] > array[j]){
insertIndex = j;
break;
}
}
if(insertIndex == -1) continue;
int temp = array[i];
for(int j = i; j < insertIndex; ++j){
array[j] = array[j + 1];
}
array[insertIndex] = temp;
}
}
3.选择排序,非稳定排序。复杂度基本上为O(n^2)不会变,因为总要遍历一遍去寻找最大值。
public static void chooseSort(int [] array){
int len = array.length;
for(int i = len - 1; i > 0; --i){
int maxIndex = 0;
for(int j = 0; j <= i; ++j){
if(array[j] > array[maxIndex])
maxIndex = j;
}
swap(maxIndex, i, array);
}
}
相关文章推荐
- Java基础复习笔记11基本排序算法
- 【复习笔记】听说找工作一定要会的三种排序算法
- 三种基础排序算法总结
- .Net学习笔记----2015-07-08(基础复习和练习02)
- Java 学习笔记 java 基础复习
- JSP基础复习学习笔记
- 复习C++ 走一遍基础 留下笔记----{一}
- 零基础深度学习笔记6——Keras-CNN-MNIST 手写数字辨识资料集
- JAVA学习笔记(复习)-----4、 JAVA基础(三)
- Java基础复习笔记系列 九 网络编程
- Tensorflow学习笔记:基础篇(6)——Mnist手写集改进版(Optimizer与Tensorboard)
- CSS从基础到熟练学习笔记(一)引入CSS样式的三种方式以及多种样式的优先级
- .Net学习笔记----2015-07-21(C#基础复习05,里氏转换)
- 深层次两张图解经典6大排序与6大基础数据结构——学完这些,妈妈再也不用担心我的排序算法与数据结构,学习笔记大放送
- IOS开发笔记4-C语言基础复习
- JavaScript基础教程复习笔记
- mybatis学习笔记之基础复习(3)
- 20135337——信息安全设计基础第七周复习笔记
- 复习C++ 走一遍基础 留下笔记----{五}
- Tensorflow学习笔记:基础篇(5)——Mnist手写集改进版(交叉熵代价函数)