算法
- 冒泡排序:从第一个数开始,比较相邻两个数的大小,如果前>后,交换位置,一轮结束后可以确定最后那个数是最大值,第二轮不管第一轮的最大值,再从第一个数开始比较相邻两数,比较到第一轮最大值前面结束,此时确定倒数第二个数在第二最大值,如此循环,每轮过后轮次+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++){
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])
j--;
if (i < j) {
int temp = c[i];
c[i] = c[j];
c[j] = temp;
}
while (i < j && c[i] < c[j])
i++;
if (i < j) {
int temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}
if (i - start > 1) {
quickSort(c, 0, i - 1);
}
if (end - j > 1) {
quickSort(c, j + 1, end);
}
}