排序
冒泡排序
两层for循环。
第一层主要控制循环次数。(每一次将一个最大的数放到最后。)
第二层 比较两个数的大小,交换两个数的值
int[] arr = {21,12,43,5,62,64,1};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(" "+ arr[i]);
}
快速排序
原理: 递归
第一次把第一个数作为基准, 定义左右指针。
右指针先开始判断。找比基准小的值,如果小,指针停止。 否则 - -
然后左指针判断 。找比基准大的值,找到指针停下。 否则++
都停下以后,交换两个变量的值。
直到 左右指针重合。 交换 基准与左右指针指向的值。
第一轮判断完成。
然后递归基准左右两边没判断的数组。
先存储好传进来的 左右指针的值。 传进来的左右指针一直++ 或- - 判断。直到最后相等。
现在得到三个值, 将排完的数组分成两份。继续递归。
public class Quicksort {
public static void main(String[] args) {
int[] arr = {21,3,1,20,42,53,12};
System.out.println(Arrays.toString(arr));
sort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] arr, int left, int right) {
if(left>=right){
return;
}
int left0 = left;
int right0 = right;
int num = arr[left0];
// left 不等于 right 继续循环
while (left != right) {
// 右指针先遍历 找小的
while (arr[right] > num && left < right) {
right--;
}
// 左指针遍历 找大的
while (arr[left] <= num && left < right) {
left++;
}
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
int temp = arr[left0];
arr[left0] = arr[left];
arr[left] = temp;
sort(arr,left0,left-1);
sort(arr,right+1,right0);
}
}