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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小棽 中级黑马   /  2015-1-21 19:06  /  1549 人查看  /  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-21 21:59
还可以再优化优化!

怎么优化,是把置换代码提取出来吗?
回复 使用道具 举报
这道题很经典
回复 使用道具 举报
楼主其实还可以写一个插入排序的
回复 使用道具 举报
面试题中会考这个吗?
回复 使用道具 举报
来看下。。。。
回复 使用道具 举报
奋斗吧骚年!!!
回复 使用道具 举报
努力学习,奔向就业班
回复 使用道具 举报
小棽 发表于 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. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马