华为|算法 | Java 常见排序算法(纯代码)( 二 )


        else {
           isSort = false;
       
   


2. 选择排序每次选出最值 , 再交换到边上;
public void selectSort(int[
nums){    for (int i = 0; i < nums.length-1; i++) {        int index = i;        int minNum = nums[i
;        for (int j = i+1; j < nums.length; j++) {            if(nums[j
< minNum){
               minNum = nums[j
;                index = j;
           
               if(index != i){
           nums[index
= nums[i
;
           nums[i
= minNum;
       
   


3. 插入排序对循环的每个数找到属于自己的位置插入;
public void insertionSort(int[
nums){    for (int i = 1; i < nums.length; i++) {        int j = i;        int insertNum = nums[i
;        while(j-1 >= 0 && nums[j-1
> insertNum){
           nums[j
= nums[j-1
;
           j--;
       
       nums[j
= insertNum;
   


4. 快速排序选一个基本值 , 小于它的放一边 , 大于它的放另一边;
public void quickSortDfs(int[
nums int left int right){    if(left > right){        return;
   
   int l = left;
   int r = right;
   int baseNum = nums[left
;    while(l < r){        //必须右边先走
       while(nums[r
>= baseNum && l < r){
           r--;
               while(nums[l
<= baseNum && l < r){
           l++;
       
       int temp = nums[l
;
       nums[l
= nums[r
;
       nums[r
= temp;
   
   nums[left
= nums[l
;
   nums[l
= baseNum;
   quickSortDfs(nums left r-1);
   quickSortDfs(nums l+1 right);


5. 归并排序分治算法;
//归public void mergeSortDfs(int[
nums int l int r){    if(l >= r){        return;
       int m = (l+r)/2;
   mergeSortDfs(nums l m);
   mergeSortDfs(nums m+1 r);
   merge(nums l m r);
//并private void merge(int[
nums int left int mid int right){    int[
temp = new int[right-left+1
;    int l = left;    int m = mid+1;    int i = 0;    while(l <= mid && m <= right){        if(nums[l
< nums[m
){
           temp[i++
= nums[l++
;
        else {
           temp[i++
= nums[m++
;
       
       while(l <= mid){
       temp[i++
= nums[l++
;
       while(m <= right){
       temp[i++
= nums[m++
;
   
   System.arraycopy(temp 0 nums left temp.length);


6. 希尔排序引入步长减少数字交换次数提高效率;
6.1 希尔-冒泡排序(慢)public void shellBubbleSort(int[
nums){    for (int step = nums.length/2; step > 0 ; step /= 2) {        for (int i = step; i < nums.length; i++) {            for (int j = i-step; j >= 0; j -= step) {                if(nums[j