Java数组-选择排序-排序的性能问题
2016-09-21 16:26
417 查看
之前的选择排序代码为:
class SelectionSort
{
public static void main(String[] args)
{
int[] arr = {14,19,11,109,56,3};
selectionSort(arr);
System.out.println("Hello World!");
for(int x=0;x<arr.length;x++)
{
System.out.print(arr[x]+",");
}
}
/*
选择排序
*/
public static void selectionSort(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 temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
for(int z=0;z<arr.length;z++)
{
System.out.print(arr[z]+",");
}
System.out.println();
}
}
}
从程序中可以看出选择排序中是通过x循环1,y循环一遍,找出当前遍历的这组数中的最小值,而每当y循环1,就将比较的两个数中较小的放在前面,就是说,当x=0时,y循环一遍,仅仅将数组中最小的数字替换到数组的第一个元素里;而当x=1时,则是从数组的第二个元素开始遍历,找出数组剩余元素的最小值,替换到第二个数组元素处。但是每当y循环1时,比较的两个数,后面的数小时,就会进行换位,这样,换位的次数就会比较多,那么可不可以找出遍历的那部分数组中的最小值之后再进行元素位置替换呢?显然是可以的。
下面是对选择排序部分的改进:
public static void selectionSort2(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
int num = arr[x];
int index = x;
for(int y=x+1;y<arr.length;y++)
{
if(num>arr[y])
{
num=arr[y];
index = y;
}
}
if(index!=x)
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
选择排序改进后的整个程序为:
/*
考虑到性能问题,对选择排序法进行一定的改良
思路:找到数组中的最小元素,将其和arr[0]换位,一次类推进行换位
换位次数相比之前的选择排序法,效率明显提高
实现: 一个变量记录最小值,一个变量记录最小值的索引
*/
class SelectionSort2
{
public static void main(String[] args)
{
System.out.println("Hello World!");
int[] arr={34,19,11,109,3,56};
selectionSort2(arr);
printArray(arr);
}
public static void selectionSort2(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
int num = arr[x];
int index = x;
for(int y=x+1;y<arr.length;y++)
{
if(num>arr[y])
{
num=arr[y];
index = y;
}
}
if(index!=x)
swap(arr,x,index);
}
}
public static void swap(int[] arr,int x,int y)
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
public static void printArray(int[] arr)
{
for(int x=0;x<arr.length;x++)
{
if(x<arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]);
}
}
}
class SelectionSort
{
public static void main(String[] args)
{
int[] arr = {14,19,11,109,56,3};
selectionSort(arr);
System.out.println("Hello World!");
for(int x=0;x<arr.length;x++)
{
System.out.print(arr[x]+",");
}
}
/*
选择排序
*/
public static void selectionSort(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 temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
for(int z=0;z<arr.length;z++)
{
System.out.print(arr[z]+",");
}
System.out.println();
}
}
}
从程序中可以看出选择排序中是通过x循环1,y循环一遍,找出当前遍历的这组数中的最小值,而每当y循环1,就将比较的两个数中较小的放在前面,就是说,当x=0时,y循环一遍,仅仅将数组中最小的数字替换到数组的第一个元素里;而当x=1时,则是从数组的第二个元素开始遍历,找出数组剩余元素的最小值,替换到第二个数组元素处。但是每当y循环1时,比较的两个数,后面的数小时,就会进行换位,这样,换位的次数就会比较多,那么可不可以找出遍历的那部分数组中的最小值之后再进行元素位置替换呢?显然是可以的。
下面是对选择排序部分的改进:
public static void selectionSort2(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
int num = arr[x];
int index = x;
for(int y=x+1;y<arr.length;y++)
{
if(num>arr[y])
{
num=arr[y];
index = y;
}
}
if(index!=x)
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
选择排序改进后的整个程序为:
/*
考虑到性能问题,对选择排序法进行一定的改良
思路:找到数组中的最小元素,将其和arr[0]换位,一次类推进行换位
换位次数相比之前的选择排序法,效率明显提高
实现: 一个变量记录最小值,一个变量记录最小值的索引
*/
class SelectionSort2
{
public static void main(String[] args)
{
System.out.println("Hello World!");
int[] arr={34,19,11,109,3,56};
selectionSort2(arr);
printArray(arr);
}
public static void selectionSort2(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
int num = arr[x];
int index = x;
for(int y=x+1;y<arr.length;y++)
{
if(num>arr[y])
{
num=arr[y];
index = y;
}
}
if(index!=x)
swap(arr,x,index);
}
}
public static void swap(int[] arr,int x,int y)
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
public static void printArray(int[] arr)
{
for(int x=0;x<arr.length;x++)
{
if(x<arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]);
}
}
}
相关文章推荐
- Java实现数组排序总结篇(冒泡,选择,插入,希尔)
- Java-数组排序(选择,冒泡,插入)
- java类实现数组的五种排序 冒泡排序、选择排序、插入排序、希尔排序、数组排序
- 2752:字符串数组排序问题(java语言)
- (Java)数组的选择排序法和二分查找法实现
- java 数组选择排序
- java学习之数组排序一:选择排序
- java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试
- java学习 - 数组-选择排序
- 冒泡排序、选择排序、插入排序、快速排序算法的时间性能分析(java实现)
- 浅谈java中整型数组选择排序的思想
- Java数组遍历、求最大值、选择排序、冒泡排序、二分查找
- Java数组排序(冒泡,选择,插入,希尔)
- 【转】Java数组排序总结(冒泡,选择,插入,希尔)
- (转) Java 数组排序总结 ( 冒泡,选择,插入,希尔)
- java数组排序问题
- java语言基础数组选择排序从小到大-作者:逝秋
- 黑马程序员:Java数组简介与数组的应用:选择排序、冒泡排序、折半查找
- Java数组排序总结(冒泡,选择,插入,希尔)
- Java基础04:选择排序;冒泡排序;折半查找;二位数组