版权声明:本文为博主原创文章,转载请注明原帖地址,谢谢 https://blog.csdn.net/AooMiao/article/details/68924411
算法
- 冒泡排序:从第一个数开始,比较相邻两个数的大小,如果前>后,交换位置,一轮结束后可以确定最后那个数是最大值,第二轮不管第一轮的最大值,再从第一个数开始比较相邻两数,比较到第一轮最大值前面结束,此时确定倒数第二个数在第二最大值,如此循环,每轮过后轮次+1,随着轮次增加每轮比较的次数下降
public void sort(int[] c){
for(int i=0;i<c.length-1;i++){//比较的轮数
for(int j=0;j<c.length-1-i;j++){//每轮比较的次数
if(c[j]>c[j+1]){
int temp = c[j+1];
c[j+1] = c[j];
c[j] = temp;
}
}
}
}
- 选择排序:第一轮:从第一个数开始,第二个数直到最后一个数都和第一个数比较,比第一个数就交换位置,一轮过后第一个数为最小值;第二轮:从第二个数开始,第三个数直到最后一个数都和第二个数比较,。。。。这样每轮都能确定!这轮!最前面的数是最小的。如此循环
public void sort(int[] c){
for(int i=0;i<c.length-1;i++){//比较的轮数,c[i]表示为这轮的目标,后面的数都和从c[i]比较
for(int j=i+1;j<c.length;j++){
if(c[i]>c[j]){
int temp = c[j];
c[j] = c[i];
c[i] = temp;
}
}
}
}
- 快速排序:递归思想,选第一个数为基准值,开始索引坐标start=0,end=length-1;基准值一直不变
- 第一次从最后往前每个数都和基准值比较,基准值大,交换位置,end坐标发生变化
- 第二次从最前往后每个数都和基准值比较,基准值小,交换位置,start坐标发生变化
- 重复上面两个步骤,直到start>=end,此时以基准值为中心,左边序列都比基准值小,右边序列都比基准值大,对左右两边序列进行递归
public void sort(int c[], int start, int end) {
int i, j;
i = start;
j = end;
if ((c == null) || (c.length == 0))
return;
while (i < j) {//查找基准点下标
while (i < j && c[i] <= c[j])
// 以数组start下标的数据为key,右侧扫描
j--;
if (i < j) { // 右侧扫描,找出第一个比key小的,交换位置
int temp = c[i];
c[i] = c[j];
c[j] = temp;
}
while (i < j && c[i] < c[j])
// 左侧扫描(此时c[j]中存储着key值)
i++;
if (i < j) { // 找出第一个比key大的,交换位置
int temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}
if (i - start > 1) { // 递归调用,把key前面的完成排序
quickSort(c, 0, i - 1);
}
if (end - j > 1) {
quickSort(c, j + 1, end); // 递归调用,把key后面的完成排序
}
}