黑马程序员技术交流社区

标题: java冒泡and快速排序 [打印本页]

作者: yefeidd    时间: 2015-8-14 18:42
标题: java冒泡and快速排序
package String_exam;


/*
* @题目:对一个字符串中的n个数字进行排序,并按从小到大输出。
* "1,20,5,-3,0,-20,1.5,25,-1.1,0,-3,5"
* 思考:
* 1.用字符串切割对字符串进行切割。
* 2.将其转换成整数型数组。
* 3.对数组进行快速排序。
* 4.将数组转换成字符串并打印。
*/




public class String_test {
       
        public static void main(String[] args)
        {
                String S1 = "1,20,5,-3,0,-20,1.5,25,-1.1,0,-3,5";
                System.out.println("排序前---"+S1);
                sor(S1);
        }
       
        public static void sor(String s)//转换排序过程
        {
                //切割字符串并转换成字符数组
                String[] str = s.split(",");
                //将字符数组转换成实数数组
                double[] Array1 = stringToDouble(str);
                double[] Array2 = stringToDouble(str);
                //对此实数型数组进行快速排序或冒泡排序
                sort1(Array1, 0, Array1.length-1);//快速排序
                sort2(Array2);//冒泡排序
                //将数组转化为字符串类型
                String st1 = DoubleToString(Array1);
                String st2 = DoubleToString(Array2);
                //输出结果
                System.out.println("快速排序:");
                sop(st1);
                System.out.println("冒泡排序:");
                sop(st2);
        }
       
       
        private static double[] stringToDouble(String[] str)//将字符数组转换为数字型数组
        {
                double[] arr = new double[str.length];
                for(int i = 0; i <str.length; i++)
                {
                        arr[i] =Double.parseDouble(str[i]);//字符->实数
                }
                return arr;
        }
       
        private static void sort1(double[] s,int low,int high)//快速排序
        {
                if(low >= high) return;//当不能再拆分时候返回。
                int l = low;//顺位标记
                int h = high;//逆位标记
                double key = s[low];//关键数
                while(l<h)//当数组的顺位上标小于数组逆位上标时候,循环
                {
                        while(l<h&&s[h]>key)//从后向前找小于等于key的值
                                h--;
                        if(l<h)
                        {
                                s[l] = s[h];//找到值将其赋给s[l]
                                l++;
                        }
                        while(l<h&&s[l]<key)//从前向后找大于等于key的值
                        l++;
                        if(l<h)
                        {
                                s[h]=s[l];//找到值后将其赋给刚才空缺的s[h];
                        }
                       
                }
                if(l==h) s[l]=key;//第一遍结束,填坑
                sort1(s, low, h-1);//对s[l]的前半段进行排序
                sort1(s, l+1, high);//对s[l]的后半段进行排序
               
        }

        private static void sort2(double[] s)//冒泡选择排序
        {
                double temp = 0;
                int kk;//记录最终选择的数组的下标
                for(int i=0;i<s.length-1;i++)
                {
                        kk = 0;
                        temp = s[i];
                        for(int j=i+1;j<s.length;j++)
                        {
                                if(s[j]<temp)
                                {
                                        temp = s[j];
                                        kk = j;
                                }
                        }
                        if(kk!=0)
                        {
                        s[kk] = s[i];//选择好了之后再将s[i]与s[kk]交换。
                        s[i] = temp;
                        }
                }       
        }
       
       
        private static String DoubleToString(double[] s)//将数组转化为字符串
        {
                StringBuilder str = new StringBuilder();
                for(int i =0; i <s.length;i++)
                {
                        str.append(s[i]+" ");
                }
               
                return str.toString();
               
        }
       
        private static void sop(String str)
        {
                System.out.println(str);
        }

}

作者: yefeidd    时间: 2015-8-14 18:43
  1. package String_exam;


  2. /*
  3. * @题目:对一个字符串中的n个数字进行排序,并按从小到大输出。
  4. * "1,20,5,-3,0,-20,1.5,25,-1.1,0,-3,5"
  5. * 思考:
  6. * 1.用字符串切割对字符串进行切割。
  7. * 2.将其转换成整数型数组。
  8. * 3.对数组进行快速排序。
  9. * 4.将数组转换成字符串并打印。
  10. */




  11. public class String_test {
  12.        
  13.         public static void main(String[] args)
  14.         {
  15.                 String S1 = "1,20,5,-3,0,-20,1.5,25,-1.1,0,-3,5";
  16.                 System.out.println("排序前---"+S1);
  17.                 sor(S1);
  18.         }
  19.        
  20.         public static void sor(String s)//转换排序过程
  21.         {
  22.                 //切割字符串并转换成字符数组
  23.                 String[] str = s.split(",");
  24.                 //将字符数组转换成实数数组
  25.                 double[] Array1 = stringToDouble(str);
  26.                 double[] Array2 = stringToDouble(str);
  27.                 //对此实数型数组进行快速排序或冒泡排序
  28.                 sort1(Array1, 0, Array1.length-1);//快速排序
  29.                 sort2(Array2);//冒泡排序
  30.                 //将数组转化为字符串类型
  31.                 String st1 = DoubleToString(Array1);
  32.                 String st2 = DoubleToString(Array2);
  33.                 //输出结果
  34.                 System.out.println("快速排序:");
  35.                 sop(st1);
  36.                 System.out.println("冒泡排序:");
  37.                 sop(st2);
  38.         }
  39.        
  40.        
  41.         private static double[] stringToDouble(String[] str)//将字符数组转换为数字型数组
  42.         {
  43.                 double[] arr = new double[str.length];
  44.                 for(int i = 0; i <str.length; i++)
  45.                 {
  46.                         arr[i] =Double.parseDouble(str[i]);//字符->实数
  47.                 }
  48.                 return arr;
  49.         }
  50.        
  51.         private static void sort1(double[] s,int low,int high)//快速排序
  52.         {
  53.                 if(low >= high) return;//当不能再拆分时候返回。
  54.                 int l = low;//顺位标记
  55.                 int h = high;//逆位标记
  56.                 double key = s[low];//关键数
  57.                 while(l<h)//当数组的顺位上标小于数组逆位上标时候,循环
  58.                 {
  59.                         while(l<h&&s[h]>key)//从后向前找小于等于key的值
  60.                                 h--;
  61.                         if(l<h)
  62.                         {
  63.                                 s[l] = s[h];//找到值将其赋给s[l]
  64.                                 l++;
  65.                         }
  66.                         while(l<h&&s[l]<key)//从前向后找大于等于key的值
  67.                         l++;
  68.                         if(l<h)
  69.                         {
  70.                                 s[h]=s[l];//找到值后将其赋给刚才空缺的s[h];
  71.                         }
  72.                        
  73.                 }
  74.                 if(l==h) s[l]=key;//第一遍结束,填坑
  75.                 sort1(s, low, h-1);//对s[l]的前半段进行排序
  76.                 sort1(s, l+1, high);//对s[l]的后半段进行排序
  77.                
  78.         }

  79.         private static void sort2(double[] s)//冒泡选择排序
  80.         {
  81.                 double temp = 0;
  82.                 int kk;//记录最终选择的数组的下标
  83.                 for(int i=0;i<s.length-1;i++)
  84.                 {
  85.                         kk = 0;
  86.                         temp = s[i];
  87.                         for(int j=i+1;j<s.length;j++)
  88.                         {
  89.                                 if(s[j]<temp)
  90.                                 {
  91.                                         temp = s[j];
  92.                                         kk = j;
  93.                                 }
  94.                         }
  95.                         if(kk!=0)
  96.                         {
  97.                         s[kk] = s[i];//选择好了之后再将s[i]与s[kk]交换。
  98.                         s[i] = temp;
  99.                         }
  100.                 }       
  101.         }
  102.        
  103.        
  104.         private static String DoubleToString(double[] s)//将数组转化为字符串
  105.         {
  106.                 StringBuilder str = new StringBuilder();
  107.                 for(int i =0; i <s.length;i++)
  108.                 {
  109.                         str.append(s[i]+" ");
  110.                 }
  111.                
  112.                 return str.toString();
  113.                
  114.         }
  115.        
  116.         private static void sop(String str)
  117.         {
  118.                 System.out.println(str);
  119.         }

  120. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2