A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小棽 中级黑马   /  2015-1-21 19:06  /  1471 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Sort {

  2.         public static void main(String[] args) {
  3.                 bubbleSort();
  4.                 System.out.println("--------------------");
  5.                 selectSort();
  6.                
  7.         }
  8.         //冒泡排序
  9.         public static void bubbleSort(){
  10.                 int[] arr = {49,56,12,87,30,25,14};  //定义一个未排序的数组
  11.                 System.out.print("进行未排序前的遍历:");
  12.                 printArray(arr); //遍历数组
  13.                 System.out.println();
  14.                 for(int i = 0; i < arr.length; i++){
  15.                         for(int j = 0; j < arr.length - 1 - i; j++){//没排序完一次,最大的就在最后面,所以不需要再比较,每次就少比较i次
  16.                                 if(arr[j] > arr[j+1]){  //如果前面一个元素比后面一个元素大,就交换位置
  17.                                         int temp = arr[j];
  18.                                         arr[j] = arr[j+1];
  19.                                         arr[j+1] = temp;
  20.                                 }
  21.                         }
  22.                         System.out.print("第"+(i+1)+"次的结果为:");
  23.                         printArray(arr); //遍历每一次排序的结果
  24.                         System.out.println();
  25.                 }
  26.                
  27.         }
  28.         //选择排序
  29.         public static void selectSort(){
  30.                 int[] arr = {49,56,12,87,30,25,14};
  31.                 System.out.print("进行未排序前的遍历:");
  32.                 printArray(arr); //遍历数组
  33.                 System.out.println();
  34.                 for(int i = 0; i < arr.length; i++){
  35.                         for(int j = i+1; j < arr.length; j++){
  36.                                 if(arr[i] > arr[j]){  
  37.                                         int temp = arr[i];
  38.                                         arr[i] = arr[j];
  39.                                         arr[j] = temp;
  40.                                 }
  41.                         }
  42.                         System.out.print("第"+(i+1)+"次的结果为:");
  43.                         printArray(arr); //遍历每一次排序的结果
  44.                         System.out.println();
  45.                 }
  46.         }
  47.         //打印数组
  48.         public static void printArray(int[] arr){
  49.                 System.out.print("["+arr[0]+",");
  50.                 for(int i = 1; i < arr.length; i++){
  51.                         if( i != arr.length - 1){
  52.                                 System.out.print(arr[i]+",");
  53.                         }else{
  54.                                 System.out.print(arr[i]+"]");
  55.                         }
  56.                 }
  57.         }

  58. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

11 个回复

正序浏览
小棽 发表于 2015-1-22 16:21
怎么优化,是把置换代码提取出来吗?

你的冒泡排序,那我就插入排序
  1. //描述插入排序
  2. public class InsertSort {
  3.         public static void main(String[] args) {
  4.                 int maxSize = 100;
  5.                 ArrayInsert arr = new ArrayInsert(maxSize);

  6.                 /*for (int i=9; i>0; i--) {
  7.                         arr.insert(i);
  8.                 }*/

  9.                 //插入100个0-100的随机数
  10.                 for (int i=0; i<maxSize; i++) {
  11.                         long n = (long) (Math.random()*(maxSize)+1);
  12.                         arr.insert(n);
  13.                 }

  14.                 long start = System.currentTimeMillis();
  15.                 System.out.println("排序前的数据: ");
  16.                 arr.display();

  17.                 arr.insertSort();
  18.                 System.out.println("排序后的数据: ");
  19.                 arr.display();

  20.                 long end = System.currentTimeMillis();
  21.                 System.out.println("spend time: " + (end-start));        //花费的时间
  22.         }
  23. }

  24. //封装数据的类
  25. class ArrayInsert {
  26.         private long[] arr;
  27.         private int nElems;

  28.         public ArrayInsert(int size) {
  29.                 arr = new long[size];
  30.                 nElems = 0;
  31.         }

  32.         //插入数据
  33.         public void insert(int value) {
  34.                 arr[nElems] = value;
  35.                 nElems ++;
  36.         }

  37.         public void display() {
  38.                 for (int i=0; i<nElems; i++) {
  39.                         System.out.print(arr[i] + " ");
  40.                 }
  41.                 System.out.println();
  42.         }

  43.         //插入排序
  44.         public void insertSort() {
  45.                 int in, out;

  46.                 for (out=1; out<nElems; out++) {
  47.                         long temp = arr[out];
  48.                         in = out;

  49.                         while(in>0 && arr[in-1]>temp) {
  50.                                 arr[in] = arr[in-1];        //右移一位
  51.                                 in --;
  52.                         }
  53.                         arr[in] = temp;                //插入数据
  54.                 }
  55.         }
  56. }
复制代码
回复 使用道具 举报
努力学习,奔向就业班
回复 使用道具 举报
奋斗吧骚年!!!
回复 使用道具 举报
来看下。。。。
回复 使用道具 举报
面试题中会考这个吗?
回复 使用道具 举报
楼主其实还可以写一个插入排序的
回复 使用道具 举报
这道题很经典
回复 使用道具 举报
寻觅 发表于 2015-1-21 21:59
还可以再优化优化!

怎么优化,是把置换代码提取出来吗?
回复 使用道具 举报
还可以再优化优化!
回复 使用道具 举报
如果能调试,我能写出来,但是如果让我用笔直接写,我估计就完蛋了!
回复 使用道具 举报
看看 呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马