版权声明:be the one ~you will be the one~~ https://blog.csdn.net/Hqxcsdn/article/details/87863033
冒泡排序与快速排序
1.快速排序 :
找到一个基准点 index 假设为 开头
设置两个指针 low,high,分别指向头和尾。
high–,往下遍历,找到一个比 index 小的数字时,停住,
然后开始 low ++ ,往上遍历,找到一个 比index大的数字,停住
如果 low 比high 小 开始交换
最后 将基准点 与 low,high相等的位置交换 ,即完成了一次排序
最后 使用递归,对左边排序 ,
此时的low不变,high变为 low-1;
同理 右边排序 ,递归,
代码如下
public static void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp = arr[low];
while (i<j) {
//先看右边,依次往左递减
while (temp<=arr[j]&&i<j) {
j--;
}
//再看左边,依次往右递增
while (temp>=arr[i]&&i<j) {
i++;
}
//如果满足条件则交换
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
quickSort(arr, low, j-1);
quickSort(arr, j+1, high);
}
2.冒泡排序
(1)从数组中第一个数开始,依次与下一个数比较并次交换比自己小的数,直到最后一个数。如果发生交换,则继续下面的步骤,如果未发生交换,则数组有序,排序结束,此时时间复杂度为O(n);
(2)每一轮”冒泡”结束后,最大的数将出现在乱序数列的最后一位。重复步骤(1)。
代码如下
public static int[] maopao(int[] x) {
/*
* (1)从数组中第一个数开始,依次与下一个数比较并次交换比自己小的数,直到最后一个数。如果发生交换,则继续下面的步骤,如果未发生交换,则数组有序,排序结束,此时时间复杂度为O(n);
(2)每一轮”冒泡”结束后,最大的数将出现在乱序数列的最后一位。重复步骤(1)。
*/
int length=x.length;
for(int i=length-1;i>=0;i--) {
for(int j=0;j<i;j++) {
if(x[j]>x[j+1]) {
int temp=x[j+1];
x[j+1]=x[j];
x[j]=temp;
}
}
}
return x;
}