一种排序
来源:互联网 发布:魏强斌 知乎 编辑:程序博客网 时间:2024/05/20 12:21
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=8
由于刚开始做题,刚开始学习数据结构(之前上课没好好学),好多都没有学到,本题中只运用了ArrayList,代码很长,如果能运用其他数据结构以及算法,肯定会有更快速简介的代码。
import java.util.ArrayList;import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO ????????? quicksort qs = new quicksort(); Scanner sc = new Scanner(System.in); ArrayList<Integer> list = new ArrayList<Integer>(); int n = sc.nextInt(); while (n-- > 0) { int m = sc.nextInt(); int m1 = m; int[][] array1 = new int[m][3]; int[][] array2 = new int[m][3]; int[][] array3 = new int[m][3]; int[][] array4 = new int[m][3]; int[] data1 = new int[m]; int[] data2 = new int[m]; int[] data3 = new int[m]; int[] flag1 = new int[m]; int[] flag2 = new int[m]; int[] flag3 = new int[m]; int count = 0; for (int i = 0; i < m1; i++) { flag1[i] = 0; flag2[i] = 0; flag3[i] = 0; } while (m-- != 0) { int id = sc.nextInt(); int length = sc.nextInt(); int width = sc.nextInt(); array1[count][0] = id; array1[count][1] = length; array1[count][2] = width; data1[count] = id; count++; } //长宽置换 for (int i = 0; i < m1; i++) { int tmp; if (array1[i][1] < array1[i][2]) { tmp = array1[i][1]; array1[i][1] = array1[i][2]; array1[i][2] = tmp; } } // 第一次排序 qs.data = data1; qs.sort(0, qs.data.length - 1); data1 = qs.data; for (int i = 0; i < m1; i++) { for (int j = 0; j < m1; j++) { if ((data1[i] == array1[j][0]) && (flag1[j] == 0)) { array2[i][0] = array1[j][0]; array2[i][1] = array1[j][1]; array2[i][2] = array1[j][2]; flag1[j] = 1; break; } } } // 第二次排序 for (int i = 0; i < m1; i++) data2[i] = array2[i][1]; for (int i = 0; i < m1; i++) { if ((i != (m1 - 1)) && (data1[i] != data1[i + 1])) { array3[i][0] = array2[i][0]; array3[i][1] = array2[i][1]; array3[i][2] = array2[i][2]; } else if (i == (m1 - 1)) { array3[i][0] = array2[i][0]; array3[i][1] = array2[i][1]; array3[i][2] = array2[i][2]; } else if ((i != (m1 - 1)) && (data1[i] == data1[i + 1])) { int k = i; while ((i != (m1 - 1)) && (data1[i] == data1[i + 1])) i++; qs.data = data2; qs.sort(k, i); data2 = qs.data; for (int i1 = k; i1 <= i; i1++) { for (int j = k; j <= i; j++) { if ((data2[i1] == array2[j][1]) && (flag2[j] == 0)) { array3[i1][0] = array2[j][0]; array3[i1][1] = array2[j][1]; array3[i1][2] = array2[j][2]; flag2[j] = 1; break; } } } } } //第三次排序 for (int i = 0; i < m1; i++) data3[i] = array3[i][2]; for (int i = 0; i < m1; i++) { if (i == (m1 - 1)) { array4[i][0] = array3[i][0]; array4[i][1] = array3[i][1]; array4[i][2] = array3[i][2]; } else if ((i != (m1 - 1)) && ((array3[i][0] != array3[i + 1][0]) || (array3[i][1] != array3[i + 1][1]))) { array4[i][0] = array3[i][0]; array4[i][1] = array3[i][1]; array4[i][2] = array3[i][2]; } else if ((i != (m1 - 1)) && ((array3[i][0] == array3[i + 1][0]) && (array3[i][1] == array3[i + 1][1]))) { int k = i; while ((i != (m1 - 1)) && (array3[i][0] == array3[i + 1][0]) && (array3[i][1] == array3[i + 1][1])) i++; qs.data = data3; qs.sort(k, i); data3 = qs.data; for (int i1 = k; i1 <= i; i1++) { for (int j = k; j <= i; j++) { if ((data3[i1] == array3[j][2]) && (flag3[j] == 0)) { array4[i1][0] = array3[j][0]; array4[i1][1] = array3[j][1]; array4[i1][2] = array3[j][2]; flag3[j] = 1; break; } } } } } //消除相同列并放入ArrayList中 for (int i = 0; i < m1; i++) { if ((i != (m1 - 1)) && ((array4[i][0] != array4[i + 1][0]) || (array4[i][1] != array4[i + 1][1]) || (array4[i][2] != array4[i + 1][2]))) { list.add(array4[i][0]); list.add(array4[i][1]); list.add(array4[i][2]); } if (i == (m1 - 1)) { list.add(array4[i][0]); list.add(array4[i][1]); list.add(array4[i][2]); break; } } //按格式输出 for (int i = 0; i < (list.size() - 1); i++) { System.out.print(list.get(i)); System.out.print(" "); System.out.print(list.get(i + 1)); System.out.print(" "); System.out.println(list.get(i + 2)); i = i + 2; } list.clear(); } }}//快速排序class quicksort { public int[] data; private int partition(int[] sortArray, int low, int hight) { int key = sortArray[low]; while (low < hight) { while ((low < hight) && (sortArray[hight] >= key)) hight--; sortArray[low] = sortArray[hight]; while ((low < hight) && (sortArray[low] <= key)) low++; sortArray[hight] = sortArray[low]; } sortArray[low] = key; return low; } public void sort(int low, int hight) { if (low < hight) { int result = partition(data, low, hight); sort(low, result - 1); sort(result + 1, hight); } } public void display() { for (int i = 0; i < data.length; i++) { System.out.print(data[i]); System.out.print(" "); } }}
0 0
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- 一种排序
- Android 的线程和线程池
- lucence 入门
- 并查集详解
- springMVC 自定义拦截器
- springMVC 类型转换
- 一种排序
- swift中UILable的使用
- JavaScript中盲点
- springMVC 格式化
- 汉诺塔问题--递归实现
- android padding margin和html padding margin的区别
- 14、Fragment
- springMVC 数据验证
- Socket在Android中的用法