选择排序,插入排序

140 阅读1分钟

1.选择排序


分析:

1.比较轮数为数组长度,故i=arr.length。

2.每一轮都是用该轮的第一个数跟其余所有数进行比较,所以比较次数是目前的轮数-1,内村换j=i-1;

3.每一轮比较挑出最小的 ,放在该轮下标的最前面。

代码实现(java代码为例):

package com.imooc.multithreading;


public class PXSFxuanze {

    public void selectSort(int[] arr){
        for (int i = 0; i < arr.length; i ++){
            for (int j = i + 1; j < arr.length; j ++){
                if (arr[j] < arr[i]){
                    int x = arr[j];
                    arr[j] = arr[i];
                    arr[i] = x;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {522,274,888,182,411,689,544,879,8998,8465,646,6468,4684};
        PXSFxuanze pxsFxuanze = new PXSFxuanze();
        pxsFxuanze.selectSort(arr);
        for (int i =0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");
        }
    }
}

运行结果:


2插入排序


分析:

1.第一轮不用比较,从第二轮开始比较的所以外层循环从1开始,故i=1,比较的总轮数为数组长度i=arr.length.;

2.分析比较次数,从第二轮开始比较一次,第三轮比较两次,故内存循环j=i,j>0,j递减,这样就刚好比较了i次。

3.每次跟前一个数进行比较,如果比它小,就交换位置

package com.imooc.multithreading;

public class PXSFcharu {
    public static void insertSort(int arr[]){
        for (int i= 1;i < arr.length;i ++) {
            for (int j = i; j > 0; j--) {
                if (arr[j] < arr[j - 1]) {
                    int num = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = num;
                }else {
                    break;
                }
            }
        }
    }
    public static void main(String[] args) {
        int[] arr= SuiJiShu.randomNumber(10000,0,100000);
        PXSFcharu.insertSort(ar1);
        for (int i =0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");
        }
}