标签:递归 div return log out == sort 总结 下标
//冒泡排序
public static void bubbleSort(int[] slist) {
//从头开始遍历
for(int i = 0;i < slist.length-1; i++) {
//一一对比
for(int j = i+1;j < slist.length; j++) {
//如果前面的数大于后边的数,冒泡往后排
if(slist[i] > slist[j]) {
//交换两个值
int temp = slist[i];
slist[i] = slist[j];
slist[j] = temp;
}
}
//System.out.println(Arrays.toString(slist));
}
}
//选择排序
public static void selectionSort(int[] slist) {
//利用循环进行遍历
for(int i = 0;i < slist.length;i++ ) {
//假设第一个值为最小值
int min = i;
//遍历获取最小值位置
for(int j = i; j < slist.length;j++) {
if(slist[min] > slist[j]) {
min = j;
}
}
//将该位置与小值交换
int temp = slist[i];
slist[i] = slist[min];
slist[min] = temp;
}
}
//插入排序
public static void insertSort(int[] slist) {
//将list[i]插入到list[0]...list[i-1]中
for(int i = 1; i < slist.length;i++) {
int temp = slist[i];
int j = i-1;
//将值往后移动
for(;j >= 0 && slist[j] > temp;j--) {
slist[j+1] = slist[j];
}
//在适当位置插入该值
slist[j+1] = temp;
}
}
public static void quickSort(int[] slist,int head, int tail) {
//如果该段一第一个下标值等于最后一个下标值,序列为空,序列长度小于等于1,结束
if(head >= tail || slist == null || slist.length <= 1) {
return ;
}
//head,tail值递归时仍需使用,因此定义i&j,取mid为基准
int i = head,j = tail, mid = slist[(head+tail)/2];
//因为i值会慢慢和j值接近,所以当i小于或等于j时保持循环,对比基准两边的值,将大于基准值的移到基准右边,将小于基准值的移到基准值左边
while(i < j) {
//在序列左边寻找大于基准的值
while(slist[i] < mid && i < j) { ++i; }
//在序列右边寻找小于基准的值
while(slist[j] > mid && i < j) { --j; }
//如果i等于j,退出当前循环
if(i == j) { break; }
//交换两个位置的值
int temp = slist[i];
slist[i] = slist[j];
slist[j] = temp;
}
// 左边子序列递归
quickSort(slist, head, i-1);
//右边子序列递归
quickSort(slist, i+1 , tail);
}
名称 | 稳定性 | 时间复杂度 | 空间复杂度 |
---|---|---|---|
冒泡排序 | 稳定 | O(n^2) | O(1) |
选择排序 | 不稳定 | O(n^2) | O(1) |
插入排序 | 稳定 | O(n^2) | O(1) |
快速排序 | 不稳定 | O(n log n)(最坏O(n^2)) | O(log n) |
标签:递归 div return log out == sort 总结 下标
原文地址:https://www.cnblogs.com/glasses/p/10549643.html