什么是选择排序呢?
就是数组的第一个与后面全部比较一次, 然后把最大或最小的放在第一个
然后用数组的第二个与后面全部又比较一次,然后还是继续把最大或者最小的放在第一个
.
这里我用Java的语法假设我们定义了一个数组a[5],然后赋值.
int[] arr = {10, 8, 21, 6, 19};
画个图是这样的
下标为0的开始的进行比较
我们求它的升序-----也就是说从小到大
然后我们要知道选择排序是这样的,就是下标0的数依次和其它下标进行比较,
然后得出第一个最小值.
然后在用下标1继续依次和除0和本身以外的下标进行比较,得到第二个最小值.
依次类推.
画图是这样的(图很多下面有链接可以直接下载看)
然后接着进行下标为1的进行比较
然后接着进行下标为2的进行比较
然后接着进行下标为3的进行比较
最后一个下标因为没有可以比较的,所以就不需要比较了.
就这样我们完成了选择排序.
简略型图解
图片链接:百度网盘
下面是java源代码
public class day05_06 { //类名
public static void main(String[] args){ //主函数
int[] arr = {10, 8, 21, 6, 19}; //定义数组
int temp; //定一个临时变量, 可以进行互换
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++) //因为最后一个不用进行比较,所以长度要减1
{
for(int j =i+1; j < arr.length; j++) //每进行一轮i循环后,它就要变成下一个数组的元素,所以要i+1
{
if(arr[i] > arr[j]) //大于就互换, 因为这里是要升序
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.print("排序后的数组:");
for(int i = 0; i < arr.length; i++) //排序后遍历输出
{
System.out.print("arr["+i+"]="+arr[i]+" ");
}
}
}
代码执行之后的结果
下面这个是利用自定义函数写的源代码:
public class day05_07 { //类名
public static void main(String[] args){
int[] arr = {10, 8, 21, 6, 19}; //定义数组
printArray(arr); //输出排序前的数组
sort(arr); //排序
printArray(arr); //输出排序后的数组
}
//函数功能:选择排序
public static void sort(int[] arr){
int temp;
for(int i = 0; i < arr.length-1; i++) //因为最后一个没有其它数可以比较所以减1
{
for(int j = 1 + i; j < arr.length; j++)
{
if(comparison(arr[i], arr[j]))
{
swap(arr, i, j);
}
}
}
}
//函数功能:比较两个数的大小,如果第一个大就true, 第二个大就false
public static boolean comparison(int a, int b)
{
if(a>b)
{
return true;
}
else
{
return false;
}
}
//函数功能:数值互换
public static void swap(int[] arr , int i , int j)
{
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//函数功能:输出数组
public static void printArray(int[] arr)
{
for(int i = 0; i < arr.length; i++)
{
System.out.print("arr["+i+"]="+arr[i]+" ");
}
System.out.println();
}
}
输出的结果还是和上图一样的,这里就不放出来了
不管用什么语言写代码,本质上都是这样子实现的!