选择排序--java(详解)
admin
2024-02-17 12:37:38
0

详细过程:

需要三个指针(i, j, m)

i--每次两数比较时较靠前的数

j--每次两数比较时较靠后的数

m--表示每次两数比较时较小的数

对于原始数组 [4, 6, 3, 9]

代码实现:

// 这是选择排序的简易版本
public class SelectSort{// 定义一个主函数public static void main(String[] args){// 定义一个数组int[] arr = {4, 6, 3, 9};// 打印排序前的数组System.out.println(Arrays.toString(arr));// 调用选择排序函数selectSort(arr);// 打印排序后的数组System.out.println(Arrays.toString(arr));}// 定义一个对无序数组进行选择排序的函数 接收一个参数 即原始数组public static void selectSort(int[] arr){// 首先初始化三个指针int i, j, minIndex;// 首先要对特殊情况进行处理if(arr == null || arr.length < 2){return;}// 定义两层循环 外层循环临时变量为i 内层循环临时变量为jfor(i = 0; i < arr.length - 1; i++){// 定义一个指针 用于指向两数比较中较小的那个数minIndex = i;for(j = i + 1; j < arr.length; j++){// 如果m指针指向的数大于j指针指向的数的话 那么就要更新m指针的指向if(arr[j] < arr[minIndex]){minIndex = j;}}// 当内层循环完毕后 需要交换m指针指向的数和i指针指向的数swap(arr, minIndex, i);}}// 定义一个函数 用于交换两个数 接收三个参数 即原始数组、索引一、索引二public static void swap(int[] arr, int index1, int index2){int temp = arr[index1];arr[index1] = arr[index2];arr[index2] = temp;}
}

但是上述做法还有优化的余地 上述做法属于单个指针向左遍历 我们可以左右两边同时设置两个指针 分别向左向右遍历其余元素 其余的做法与上述做法如出一辙

优化过后 对于原始数组 [4, 6, 3, 9]

代码优化:

import java.util.Arrays;
​
public class SelectSortOptimization{// 定义一个主函数public static void main(String[] args){// 定义一个数组int[] arr = {4, 6, 3, 9};// 打印排序前的数组System.out.println(Arrays.toString(arr));// 调用选择排序函数对无序数组进行升序排序操作selectSortOptimization(arr);// 打印排序后的数组System.out.println(Arrays.toString(arr));}// 定义一个函数 用于对无序数组进行选择排序 接收一个参数 即原始数组public static void selectSortOptimization(int[] arr){// 需要对一些特殊情况进行处理if(arr == null || arr.length < 2){return;}// 定义五个指针int i, j, k, minIndex, maxIndex;// 为i和j赋初始值i = 0;j = arr.length - 1;// 定义两层循环 外层循环为while循环 条件为i= arr[maxIndex])maxIndex = k;
​}// for循环完毕以后 需要交换maxIndex指针指向的数和j指针指向的数 也需要交换minIndex指针指向的数和i指针指向的数// 首先交换一下maxIndex指针数和j指针数int temp = arr[maxIndex];arr[maxIndex] = arr[j];arr[j] = temp;// 接着如果想要交换minIndex指针数和i指针数的话 需要对一个特殊情况进行处理// 如果minIndex指针最后指向了j指针所指向的数的话 那么前面有已经将j指针数和maxIndex指针数进行了交换 如今我们想要做的操作是将minIndex指针数(也就是原来j指针数)与i指针数进行交换 但是由于被maxIndex指针抢先一步交换 所以我们应该把minIndex指针赋值为maxIndex指针if(minIndex == j){minIndex = maxIndex;}// 交换一下i指针数和minIndex指针数temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;// 然后写完以后不要忘了条件控制语句 让i指针向左移动 j指针向右移动i++;j--;}}
}

这就是我对选择排序的理解 大家如果有什么意见可以提出来 我们一起进步!!

相关内容

热门资讯

神武 奇遇任务 神武 奇遇任务在哪可以遇到?随机的 有空到到处躲走走 我记得有一天 连续给了我10个奇遇
魔兽世界破军比武场任务怎么做 魔兽世界破军比武场任务怎么做指定去排破军比武场的场景战役即可
伊洛纳便携式烹饪工具怎么获得 伊洛纳便携式烹饪工具怎么获得完成任务。做一个苹果沙冰给食品店老板,就可以获得一个便携式烹饪工具,让自...
良辰美景接近打成语 良辰美景接近打成语【风前月下】:指良辰美景。【良辰媚景】:美好的时光和景物。同“良辰美景”。【良时美...
“给”字开头成语有哪些? “给”字开头成语有哪些? “给”字开头成语:无。给的成语:户给人足、家给民足、家给人足、人给家足、自...
肺上有肿瘤治得好吗? 肺上有肿瘤治得好吗?有一定的效果肺脏肿瘤不好治疗,临床上肺脏恶性肿瘤属于肺癌。在治疗上早期可以通过手...
怎样做才能让对方感觉到你真的很... 怎样做才能让对方感觉到你真的很在乎他?多给她一些精神上的关心和爱护,多体贴她,要包容她。对她周围的一...
帮忙写篇作文! 帮忙写篇作文!今天轮到我给孩子们做班主任,一天过后,心情很激动。看着孩子们可爱的笑脸,就仿佛看到我童...
有人说郭德纲的相声比较俗,那么... 有人说郭德纲的相声比较俗,那么相声“俗雅”的解释权在谁手里?我认为相声俗雅的解释权应该在观众手里,而...
2024年中国旅游者出境满意度... 今天分享的是:2024年中国旅游者出境满意度报告 报告共计:28页 2024年中国出境游满意度报告:...
7.15上海游戏峰会:解码全球... 2025年7月15日,由上海市新闻出版局指导、上海市网络游戏行业协会主办的上海游戏精英峰会暨上海游戏...
新华全媒头条|共绘雪域高原同心... (配本社同题文字稿) 孩子们在位于西藏那曲市色尼区南部新城的“温暖嘉·色尼城市书房”看书(202...
小学楼道里涂鸦墙用水粉颜料可以... 小学楼道里涂鸦墙用水粉颜料可以吗,墙上是油漆涂过的不可以,用水粉一擦就掉了,用丙烯颜料,和水粉感觉差...
有什么科幻小故事,短一些? 有什么科幻小故事,短一些? 遇见外星人一天,我在公园里散步。突然,一个像盘子一样发着许多光的东西...
幼儿园安吉室外投放哪些材料 幼儿园安吉室外投放哪些材料幼儿园安吉室外投放材料滚筒、积木、长板、木箱、梯子、沙水、锅、碗、瓢、盆、...
爱情的十字路口我该怎么选择? 爱情的十字路口我该怎么选择?真爱掌握在你自己手中!爱他就努力争取,不顾一切!还不是很爱他,那就等等,...
有没有和《恶魔狂想曲之明日骄阳... 有没有和《恶魔狂想曲之明日骄阳》差不多精彩的小说?女主角很多,个性鲜明,主角多情但不滥情,富于正义文...
功利主义是否认为道德应该是一种... 功利主义是否认为道德应该是一种绝对的命令?最源头的定义是边沁的观点,使所有人的快乐最大化。之后有缪尔...
什么是CC猫啊 什么是CC猫啊CC是一只可爱活泼的猫猫,因为诞生于沪江网校所以全称:沪江网校CC猫。CC猫常常出没于...