冒泡排序:冒泡排序就是从数组的第一个数据开始,2个数据之间比较,把较大的数字往后面放,如第一个和第二个比较,把较大的数放在后面,然后再用第二个数据和第三个数据进行比较,再次把比较大的一个放在后面,就是2个数据交换位置,把大的数据放在后面,然后一个交换,直到到最后一个位置,然后再从第二个数据开始,2个数据进行交换,一直到整个数组交换完成。
代码实现:
let a=[1,4,7,9,27,2,8];
//冒泡排序,每一趟找出最大的,总共比较次数为arr.length-1次,每次的比较次数为arr.length-1次,依次递减
let len = arr.length;
for(let k = 0; k < len - 1; k++) {
for(let m = 0; m < len - k - 1; m++) {
if(arr[m] > arr[m+1]){
let val = arr[m];
arr[m] = arr[m+1];
arr[m+1] = val;
}
}
}
console.log(arr)
选择排序:在数组里面先定义一个最小值放在数组第一个位置上面,然后依次和它后面的数组进行比较,把最小的放在第一位,然后换到第二位,第二小开始与后面的元素比较,把后面当中的最小换到第二位上,然后依次循环,直到排到倒数第二位。
代码实现:
var a=[1,23,5,9,11,66,27];
let len = arr.length;
for(let k = 0; k < len - 1; k++) {
for(let m = k + 1; m < len; m++) {
if(arr[k] > arr[m]){
let val = arr[m];
arr[m] = arr[k];
arr[k] = val;
}
}
}
console.log(arr)
快速排序:从数列中挑出一个元素,称为 “基准”(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作,递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
public class QuickSort {
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);
}