• 有关数组的几种排序


    数组排序:

      1 package com.demo.sort;
      2 
      3 import java.util.Date;
      4 
      5 public class Sorts {
      6 
      7     public static void main(String[] args) {
      8         // TODO Auto-generated method stub
      9         /*
     10          * int len=10; int arr[] = new int[len]; for (int i = 0; i < len; i++) {
     11          * arr[i]=(int) (Math.random()*10000); }
     12          */
     13 
     14         int arr[] = new int[] { 7, 8, 1, 3, 2, 5, 4, 6 };
     15 
     16         // Date dt = new Date();
     17         // Long time = dt.getTime();//距离1970年1月1日0点0分0秒的毫秒数
     18         // System.out.println(time);
     19 
     20         Sorts sorts = new Sorts();
     21         // sorts.BubbleSort(arr);//冒泡排序
     22         // sorts.SelectSort(arr);//选择排序
     23         // sorts.insertSort(arr);//插入排序
     24         sorts.quickSort(0, arr.length - 1, arr);// 快速排序
     25 
     26         // System.out.println(System.currentTimeMillis());//
     27         // 距离1970年1月1日0点0分0秒的毫秒数
     28 
     29         for (int i = 0; i < arr.length; i++) {
     30             System.out.print(arr[i] + " ");
     31         }
     32 
     33     }
     34 
     35     // 冒泡排序
     36     public void BubbleSort(int arr[]) {
     37         int temp = 0;
     38         // 外层循环决定一共走几趟
     39         for (int i = 0; i < arr.length - 1; i++) {
     40             // 内层循环,逐个比较
     41             // 前一个如果比后一个大则换位
     42             for (int j = 0; j < arr.length - 1 - i; j++) {
     43                 if (arr[j] > arr[j + 1]) {
     44                     // 换位
     45                     temp = arr[j];
     46                     arr[j] = arr[j + 1];
     47                     arr[j + 1] = temp;
     48                 }
     49             }
     50         }
     51     }
     52 
     53     // 选择排序
     54     public void SelectSort(int arr[]) {
     55         int temp = 0;
     56         int minValue = 0;
     57         int index = 0;
     58 
     59         for (int i = 0; i < arr.length - 1; i++) {
     60             minValue = arr[i];
     61             index = i;
     62 
     63             // 查找到最小值
     64             for (int j = i + 1; j < arr.length; j++) {
     65                 if (minValue > arr[j]) {
     66                     minValue = arr[j];
     67                     index = j;
     68                 }
     69             }
     70 
     71             // 把最小的值排到第一个
     72             temp = arr[i];
     73             arr[i] = minValue;
     74             arr[index] = temp;
     75         }
     76     }
     77 
     78     // 插入排序
     79     public void insertSort(int arr[]) {
     80         int insertVal;
     81         int index;
     82         for (int i = 1; i < arr.length; i++) {
     83             // 准备和前一个比较的数
     84             insertVal = arr[i];
     85             // 前一个数组下标
     86             index = i - 1;
     87             // 逐一和前面的数比较
     88             while (index >= 0 && insertVal < arr[index]) {
     89                 // 比较的数如果小于前一个数将前一个数往后移
     90                 arr[index + 1] = arr[index];
     91                 // index向前移动
     92                 index--;
     93             }
     94             // 插入
     95             arr[index + 1] = insertVal;
     96         }
     97     }
     98 
     99     // 快速排序
    100     public void quickSort(int left, int right, int array[]) {
    101         int l = left;
    102         int r = right;
    103         int midVal = array[(left + right) / 2];//找到中间的值
    104         int temp = 0;
    105         
    106         //把比中间值大的放到中间值的右边、小的放到中间值的左边
    107         while (l < r) {
    108             while (array[l] < midVal) {
    109                 l++;
    110             }
    111             while (array[r] > midVal) {
    112                 r--;
    113             }
    114 
    115             if (l >= r) {
    116                 break;
    117             }
    118 
    119             temp = array[l];
    120             array[l] = array[r];
    121             array[r] = temp;
    122 
    123             if (array[l] == midVal) {
    124                 r--;
    125             }
    126             if (array[r] == midVal) {
    127                 l++;
    128             }
    129         }
    130 
    131         if (l == r) {
    132             l++;
    133             r--;
    134         }
    135         
    136         //递归
    137         if (left < r) {
    138             quickSort(left, r, array);
    139         }
    140         if (right > l) {
    141             quickSort(l, right, array);
    142         }
    143     }
    144 }
  • 相关阅读:
    AngularJS特性
    FOR XML PATH 解决联接返回结果集各记录问题
    ASP.NET MVC与WebForm区别
    C#.net 获取当前应用程序所在路径及环境变量
    .net 4.0 运行时中运行.net2.0开发的程序
    混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集
    sort() 方法用于对数组的元素进行排序
    SQL Server 表和索引存储结构
    SQL Server 数据库文件管理
    navicat 导入数据报错 --- 1153
  • 原文地址:https://www.cnblogs.com/hackerd/p/3025820.html
Copyright © 2020-2023  润新知