排序 没事练习

  1 package com.taotao.api;
  2 
  3 import org.junit.Test;
  4 
  5 import java.util.Arrays;
  6 import java.util.List;
  7 
  8 public class SortTest2 {
  9 
 10 
 11     @Test
 12     public void sortInsert() {
 13 
 14         int[] array = new int[5];
 15 
 16         array[0] = 2;
 17         array[1] = 1;
 18         array[2] = 4;
 19         array[3] = 5;
 20         array[4] = 1;
 21 
 22         for (int i = 0; i < array.length; i++) {
 23             //查找合适位置
 24             int point = i;
 25             for (int j = 0; j < i; j++) {
 26                 if (array[i] < array[j]) {
 27                     point = j;
 28                     break;
 29                 }
 30             }
 31             if (i == point) continue;
 32 
 33             int temp = array[i];
 34             //序列后移
 35             for (int j = i; j > point; j--) {
 36                 array[j] = array[j - 1];
 37             }
 38             //赋值合适位置
 39             array[point] = temp;
 40         }
 41 
 42         for (int i : array) {
 43             System.out.print(i);
 44         }
 45 
 46     }
 47 
 48     @Test
 49     public void sortQuick() {
 50         List<Integer> arrayList = Arrays.asList(15,17,2,4,3);
 51         int[] list = arrayList.stream().mapToInt(x -> x).toArray();
 52         quick(list, 0, list.length - 1);
 53     }
 54 
 55     private void quick(int[] list, int left, int right) {
 56 
 57         int head = left;
 58         int tail = right;
 59 
 60         //以temp 作为对比值
 61         Integer temp = list[head];
 62         while (head < tail) {
 63             //从后往前 找最近一个小于 对比值
 64             //并将 此值 扔到 head位置
 65             while (head < tail && list[tail] >= temp) tail--;
 66             if (head != tail) {
 67                 list[head] = list[tail];
 68             }
 69             //从前往后 找大于对比值的
 70             //扔到 tail 位置
 71             while (head < tail && list[head] <= temp) head++;
 72             if (head != tail) {
 73                 list[tail] = list[head];
 74             }
 75         }
 76         //将对比值 扔到 合适位置
 77         if (head == tail) list[head] = temp;
 78 
 79         //Stream.of(list).forEach(x-> System.out.println(x+","));
 80         for (int i : list) {
 81             System.out.print(i);
 82             System.out.print(",");
 83         }
 84         System.out.println("");
 85 
 86         if (left > right) return;
 87 
 88         //递归 左块
 89         if (left < head) {
 90             quick(list, left, head);
 91         }
 92         //递归右块
 93         if (head + 1 < right) {
 94             quick(list, head + 1, right);
 95         }
 96 
 97     }
 98 
 99     /***
100      * 交换排序
101      */
102     @Test
103     public void sortNormal() {
104 
105         List<Integer> arrayList = Arrays.asList(25, 10, 22, 30, 45, 53, 12, 43);
106         int[] list = arrayList.stream().mapToInt(x -> x).toArray();
107 
108 
109         for (int i = 0; i < list.length; i++) {
110             for (int j = 0; j < i; j++) {
111                 if (list[i] <= list[j]) {
112                     int temp = list[i];
113                     list[i] = list[j];
114                     list[j] = temp;
115                 }
116             }
117         }
118 
119         for (int i : list) {
120             System.out.print(i);
121             System.out.print(",");
122         }
123         System.out.println("");
124     }
125 
126 
127 
128 }

 

posted @ 2018-03-10 20:45  沐松  阅读(322)  评论(0编辑  收藏  举报