黑马程序员技术交流社区
标题:
关于选择排序的优化
[打印本页]
作者:
张先庆
时间:
2013-7-20 15:25
标题:
关于选择排序的优化
本帖最后由 杨兴庭 于 2013-7-21 12:32 编辑
class SelectSort
{
public static void main(String[] args)
{
int temp []={34,56,76,2,670,8,1};
System.out.println("排序之前......."+temp);
//调用函数对排序前结果进行打印
printArray(temp);
//调用函数对数组进行排序
selectSort(temp);
//调用函数对排序后结果进行打印
System.out.println("排序之后.......");
printArray(temp);
}
public static void selectSort(int arr[])
{
//外层循环控制比较的轮数
for(int i=0;i<arr.length-1;i++)
{
int min=i;//用min记录每轮比较中最小那个数的角标
for(int j=i+1;j<arr.length;j++)
{
if(arr[min]>arr[j])//
{
min=j;
}
}
swap(arr,i,min);
}
}
/*
完成数组的打印功能
*/
public static void printArray(int arr[])
{
for(int i=0;i<arr.length;i++)
{
System.out.println(arr
);
}
}
public static void swap(int []arr,int x,int y)
{
arr[x]=arr[x]^arr[y];
arr[y]=arr[x]^arr[y];
arr[x]=arr[x]^arr[y];
}
}
为什么不对????????????????
QQ图片20130720152234.jpg
(27.57 KB, 下载次数: 0)
下载附件
2013-7-20 15:23 上传
作者:
wedge
时间:
2013-7-20 15:48
int min=i;//用min记录每轮比较中最小那个数的角标
for(int j=i+1;j<arr.length;j++)
{
if(arr[min]>arr[j])//
{
min=j;
}
}
swap(arr,i,min);
当i=5时,也就是此时的序列为1 2 8 34 56 76 670 你看你的代码还是使用了swap(arr,5,5);最后将76变成了
0放到数组里面去了。所以你在使用swap的时候应该判断一下 i==min?不交换:交换 这样子。希望你再仔细看看。
作者:
王广亚
时间:
2013-7-20 16:46
本帖最后由 王广亚 于 2013-7-20 16:47 编辑
package e1;
public class SelectSort{
public static void main(String[] args) {
int temp []={34,56,76,2,670,8,1};
System.out.println("排序之前.......");
//调用函数对排序前结果进行打印
printArray(temp);
//调用函数对数组进行排序
selectSort(temp);
//调用函数对排序后结果进行打印
System.out.println("排序之后.......");
printArray(temp);
}
public static void selectSort(int arr[]){
for(int i=0;i<arr.length-1;i++){
// int min=i;//为什么要标记最小那个数的角标?只要前面的数大就换为就行了。
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
swap(arr,j,i);
}
}
}
}
/*
完成数组的打印功能
*/
public static void printArray(int arr[]){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+", " );//此处不要println,用了没打印一个元素就会换行
}
System.out.print("\n");
}
public static void swap(int []arr,int x,int y){
arr[x]=arr[x]^arr[y];
arr[y]=arr[x]^arr[y];
arr[x]=arr[x]^arr[y];
}
}
复制代码
作者:
xuaner0719
时间:
2013-7-20 19:21
同学你是不是传智0712基础班的,这代码。。。
作者:
云游天下
时间:
2013-7-21 00:34
这个算优了吧 自己刚编的
class SelectSort {
public static void main(String[] args) {
int [] i={99,33,44,22,66,55,77,88,33,66};
getPaiXu(i);
}
public static void getPaiXu(int [] arr){
for (int x=0; x< arr.length-1; x++){
for (int y=x+1; y< arr.length; y++){
if (arr[x]>arr[y]) {
int s=arr[x];
arr[x]=arr[y];
arr[y]=s;
}
}
}
for (int x=0;x<arr.length; x++){
System.out.print(arr[x]+" ");
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2