有关数组的几种排序

数组排序:

  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 }

 

posted @ 2013-04-17 11:26  HackerD  阅读(168)  评论(0编辑  收藏  举报