【从头开始学算法】选择排序 插入排序 冒泡排序
2015-09-26 17:03
357 查看
需求:对数组中数字进行排序
选择排序:
思想:从头开始,最小值和第一个交换,次小值和第二个交换。。。。。
最好情况=最差情况=O(n^2)
插入排序:
思想:假定前面i个已经排好序,从i+1开始依次向前比较,插入到合适位置
最好情况:顺序排列 O(n)
最坏情况:逆序排列O(n^2)
平均情况:O(n^2)
冒泡排序:
思想:相邻比较交换,一趟完成最大的上浮
private static void BubbleSort(int[] arr) {
for(int i=0;i<arr.length-1;i++){
boolean flag = true;//如果不设标识,复杂度都为O(n^2)
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
flag = false;
}
}
if(flag){
return;
}
}
}
最好情况:O(n)因为设置了标识,所以仅进行一次数量为n的比较
最坏情况:O(n^2)
平均情况:O(n^2)
选择排序:
思想:从头开始,最小值和第一个交换,次小值和第二个交换。。。。。
private static void SelectionSort(int[] arr) { for(int i=0;i<arr.length;i++){ int min=i; for(int j=i+1;j<arr.length;j++){ if(arr[j]<arr[min]){ min=j; } } int tmp = arr[min]; arr[min] =arr[i]; arr[i]=tmp; } }
最好情况=最差情况=O(n^2)
插入排序:
思想:假定前面i个已经排好序,从i+1开始依次向前比较,插入到合适位置
private static void InsertionSort(int[] arr) { for(int i=1;i<arr.length;i++){ int key = arr[i]; int n=i; while(n>0&&key<arr[n-1]){ arr = arr[n-1]; n--; } arr =key; } }
最好情况:顺序排列 O(n)
最坏情况:逆序排列O(n^2)
平均情况:O(n^2)
冒泡排序:
思想:相邻比较交换,一趟完成最大的上浮
private static void BubbleSort(int[] arr) {
for(int i=0;i<arr.length-1;i++){
boolean flag = true;//如果不设标识,复杂度都为O(n^2)
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
flag = false;
}
}
if(flag){
return;
}
}
}
最好情况:O(n)因为设置了标识,所以仅进行一次数量为n的比较
最坏情况:O(n^2)
平均情况:O(n^2)
相关文章推荐
- 动易2006序列号破解算法公布
- 文件遍历排序函数
- C#选择排序法实例分析
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#实现Datatable排序的方法
- 超大数据量存储常用数据库分表分库算法总结
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- SQL学习笔记四 聚合函数、排序方法
- C#实现的算24点游戏算法实例分析
- C#对list列表进行随机排序的方法
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的