黑马程序员技术交流社区
标题:
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
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);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2