冒泡排序
每一次循环都是将最大的放在最右边直到循环结束,数组就会变成有序的了
具体实现是使用了两个for循环,第一个for循环选定每一个位置的数字,第二个for循环将每一个位置的数字与它后一位的数字进行对比,如果前一位大于后一位,就交换位置。这样就把大的放在了后面,实现如下。
public void Maopao(int [] list){
for (int i = 0; i < list.length; i++) {
for (int j = i +1 ; j <list.length ; j++) {
swip(list,i,j);
}
}
for (int i = 0; i < list.length; i++) {
System.out.println(list[i]);
}
}
public void swip(int [] list , int i , int j){
if(list[i]>list[j]){
int tmp = list[i] ;
list[i] = list[j];
list[j] = tmp;
}
}
快速排序
快速排序的思路为,找到一个基准数,分别从两边遍历,来提升效率,并由每一次循环的最后一个基准数,分成左右两个部分,左边比基准数小,右边比基准数大,然后分别对子数列进行同样的操作
实现的代码如下,详细步骤注释写的很清楚。
public void Sort(int [] sqList , int low , int high){
//i和j是用来判断区域的临时变量,在递归时,判断是否需要递归。
int i = low;
int j = high;
//tmp是基准数,用来确定替换以及方向的改变的位置
int tmp = sqList[low];
while (low<high){
//先从右往左遍历,找出比基数小的
while ((low<high) && (sqList[high] >= tmp)){
high -- ;
}
//找到比基数小的了,跳出了循环,然后将基数与比基数小的进行位置调换,
//然后从调换后的后一位进行遍历
sqList[low] = sqList[high];
sqList[high] = tmp;
low++;
// 然后改变遍历方向,从左往右,之后从调换后的i的后一位进行遍历;
while ((low<high) && (sqList[low] <= tmp)){
low ++;
}
//然后判断可能上面的while把low变成大于high,
// 所以我们要进行判断,如果low<high,而且,
// tmp小于sqList[low] 就调换一次。然后high--;(从high-1开始)
if(low < high){
sqList[high] = sqList[low];
sqList[low] = tmp;
high--;
}
}
//前一段
if(i<low-1){
Sort(sqList,i,low-1);
}
//后一段
if(low<j){
Sort(sqList,low,j);
}
}