冒泡排序(核心思想:通过两两比较将最小/大值移至数组末位)

  public static void main(String[] args) {
      int array[]= new int[9]; //定义数组
        int temp;//定义临时变量
        int isChange ;//定义变量用来标识是否改变
        int num=0;//置换次数
        for (int i = 0; i <9 ; i++) {
            array[i]=new Random().nextInt(50);
        }//初始化数组
        for (int i = 0; i < array.length-1; i++) {
            isChange=0;
            for (int j = 0; j < array.length-i-1; j++) {
                temp=array[j];
                if (array[j]>array[j+1])
                {
                      //大的数字往后移
                       temp=array[j+1];
                       array[j+1]=array[j];
                       array[j]=temp;
                       //说明发生改变
                       isChange=1;
                       num++;
                }
            }
            if (isChange==0)
            {
                break;
            }
        }
       //遍历数组
        for (int i : array) {
            System.out.println(i);
        }
        System.out.println(num+"asdad");
    }

选择排序(核心思想:通过两两比较获取最大/小值下标与数组末置位置换)

 public static void main(String[] args) {
      int array[]= new int[9]; //定义数组
        int temp;//定义临时变量
//      int isChange ;//定义变量用来标识是否改变
        int pos;//用来置换变量
        for (int i = 0; i <9 ; i++)
        {
            array[i]=new Random().nextInt(50);
        }//初始化数组
        for (int i = 0; i <array.length-1 ; i++) {
            pos=0;
            for (int j = 0; j < array.length-i; j++) {
                if(array[j]>array[pos])
                {
                    //将数组大的地址给它
                    pos=j;
                }
                //交换
                temp=array[pos];
                array[pos]=array[array.length-1-i];
                array[array.length-1-i]=temp;
            }
        }
             for (int i : array) {
             System.out.println(i);
       }
    }

  插入排序(核心思想:)

 public static void main(String[] args) {
        int arrays[] = new int[9]; //定义数组
        int temp;//定义临时变量
        for (int i = 0; i < 9; i++) {
            arrays[i] = new Random().nextInt(50);
        }//初始化数组
        //外层循环控制需要排序的趟数(从1开始因为将第0位看成了有序数据)
        for (int i = 1; i < arrays.length; i++) {
            temp = arrays[i];
            //如果前一位(已排序的数据)比当前数据要大,那么就进入循环比较[参考第二趟排序]
            int j = i - 1;
            while (j >= 0 && arrays[j] > temp) {
                 //往后退一个位置,让当前数据与之前前位进行比较
                   arrays[j + 1] = arrays[j];
                  //不断往前,直到退出循环
                     j--;
                }
             //退出了循环说明找到了合适的位置了,将当前数据插入合适的位置中
                  arrays[j + 1] = temp;
        }
        //遍历数组
        for (int array : arrays) {
            System.out.println(array);
        }
    }

  快速排序(核心思想:自定义一个支点(一个用来比较的数字),将比支点大的数字放在左边,比支点小的数字放在支点右边)【递归思想】

 public static void main(String[] args) {
        int arrays[] = new int[19]; //定义数组
        int temp;//定义临时变量
        for (int i = 0; i < 19; i++) {
            arrays[i] = new Random().nextInt(50);
        }//初始化数组
        for (int array : arrays) {
            System.out.print(array+"->");
        }
        System.out.println();
        //初始化数组
        quickSort(arrays,0,arrays.length-1);
        for (int array : arrays) {
            System.out.print(array+"->");
        }
    }

    public static void quickSort(int []arrays,int L,int R) {
        int i=L;
        int j=R;
        //支点
        int pivot=arrays[(L+R)/2];//取中心点,只要两端没有交替,就一直扫描
        //左右两边扫描,
        while (i<=j)
        {
            //寻找直到比支点大的数
            while (pivot>arrays[i])
                i++;
            //寻找直到比支点小的数
            while (pivot<arrays[j])
                j--;
            //此时已经分别找到了比支点小的数的右边,比支点大的数在左边,它们进行交换
            if(i<=j)
            {
                int temp=arrays[i];
                arrays[i]=arrays[j];
                arrays[j]=temp;
                i++;
                j--;
            }
        }
        //以上步骤完成第一躺排序操作,左边表示比支点小,右边表示比支点大
        //左边进行排序,查到左边之剩下一个数
        if (L<j)
            quickSort(arrays,L,j);
        //右边进行排序,查到右边之剩下一个数
        if (i<R)
            quickSort(arrays,i,R);

    }

  希尔排序:(核心思想,先分组,最后插入排序)

 public static void main(String[] args) {
        int arrays[] = new int[9]; //定义数组
        int temp;//定义临时变量
        for (int i = 0; i < 9; i++) {
            arrays[i] = new Random().nextInt(50);
        }//初始化数组
        for (int array : arrays) {
            System.out.print(array+"->");
        }
        System.out.println();
        shellSort(arrays);
        for (int array : arrays) {
            System.out.print(array+"->");
        }
        System.out.println();
    }
    public static void shellSort(int[] arrays) {
        //增量每次都/2
        for (int step = arrays.length / 2; step > 0;
             step /= 2) {
            //从增量那组开始进行插入排序,直至完毕
            for (int i = step; i < arrays.length; i++) {
                int j = i;
                int temp = arrays[j];
                // j - step 就是代表与它同组隔壁的元素
                while (j - step >= 0 && arrays[j - step] > temp) {
                       arrays[j] = arrays[j - step];
                       j = j - step;
                }
                arrays[j] = temp;
            }
        }
    }

  堆排序:(核心思想:将数组构造为二叉树形式,利用比较,置换将根节点变成最大,拿出,重复以上动作)

    归并排序:(核心思想:将数组分组直到不能分为止,然后进行比较后排序,合并排序好的分组)

    二分查找算法:(核心思想:查找的值每次与数组中间的值比较,确定下一步操作)

int binarysearch(int array[], int low, int high, int target) {
    if (low > high) return -1;
    int mid = low + (high - low) / 2;
    if (array[mid] > target)
        return binarysearch(array, low, mid - 1, target);
    if (array[mid] < target)
        return binarysearch(array, mid + 1, high, target);
    return mid;
}

 

 

 

 

posted on 2020-05-22 15:29  王嘉豪  阅读(166)  评论(0)    收藏  举报