为什么说这个选择排序是高级的选择排序?
嗯…这个是相对于选择排序来说的
链接:选择排序
高级选择排序和选择排序的最大的区别:
选择排序:
每次都要和自己以下的下标进行互换
(如果是升序就是大于的互换,如果是降序就是小于的互换)
这样可能要互换很多次
高级选择排序:
只需要换一次,就可以把该换的的换好
这里用的是java的语法
假设我们定义int[] arr = {5, 10, 6, 12, 3};
高级选择排序图解(图很多下面有链接可以直接下载看):
.
.
这里用升举例
画个图是这样的
然后把第二个数组的数值给到 temp, 下标给到mark;
然后把第三个数组的数值给到 temp, 下标给到mark;
然后把第三四数组的数值给到 temp, 下标给到mark;
图片链接:百度网盘
下面是java源代码
public class day05_10 { //类名
public static void main(String[] args){ //主函数
int[] arr = {5, 10, 6, 12, 3};
System.out.print("排序前:");
for(int i =0; i < arr.length; i++) //输出排序后的
{
System.out.print("arr["+i+"]="+arr[i]+" ");
}
System.out.println(); //换行
for(int i =0; i < arr.length-1; i++)
{
int temp = arr[i]; //记录数组的值
int mark = i; //记录下标
for(int j = 1+i; j < arr.length; j++)
{
if(temp > arr[j])
{
temp = arr[j];
mark = j;
}
}
int snap = arr[i]; //snap 用于两个数互换的媒介
arr[i] = arr[mark];
arr[mark] = snap;
}
System.out.print("排序后:");
for(int i =0; i < arr.length; i++) //输出排序后的
{
System.out.print("arr["+i+"]="+arr[i]+" ");
}
}
}
代码执行之后的结果
下面这个是利用自定义函数写的源代码:
/*
演示高级选择排序--函数功能
*/
package day05; //包名
public class day05_11 { //类名
public static void main(String[] args){ //主函数
int[] arr = {5, 10, 6, 12, 3};
printArr(arr); //输出排序前
sort(arr); //排序
printArr(arr); //输出排序后
}
//函数功能高级选择排序
public static void sort(int[] arr){
for(int i = 0; i < arr.length-1; i++)
{
int temp = arr[i]; //记录数组的值
int mark = i; //记录下标
for(int j = 1+i; j < arr.length; j++)
{
if(temp > arr[j])
{
temp = arr[j];
mark = j;
}
}
swap(arr, i, mark);
}
}
//函数功能:数值互换
public static void swap(int arr[], int i, int mark){
int temp = arr[i];
arr[i] = arr[mark];
arr[mark] = temp;
}
//输出数组
public static void printArr(int arr[]){
for(int i = 0; i < arr.length; i++)
{
System.out.print("arr["+i+"]="+arr[i]+" ");
}
System.out.println();
}
}
输出的结果还是和上图一样的,这里就不放出来了
不管用什么语言写代码,本质上都是这样子实现的!