排序算法——选择排序
来源:互联网 发布:一览 mac 编辑:程序博客网 时间:2024/06/06 08:48
选择排序(Selection Sort): 1.基本思路:选择某个索引位置的元素,然后和后面元素依次比较,若大于则交换位置,经过第一轮比较排序后可得出最小值,然后使用同样的方法把剩下的元素逐个比较即可 2.可以看出选择排序,第一轮会选出最小值,第二轮会选出第二个小的值,直到最后,第一轮从arr[0]和后面元素相比较,第二轮从arr[1]和后面的元素相比较,依次类推,N个元素要进行N-1轮,选择排序每一轮只进行一次交换,相对于冒泡排序效率高一些,有N个元素,所以有N-1轮比较,第M轮比较的是N-M次 3.相对于冒泡排序的优点:选择排序是可以从某一个元素开始,冒泡排序不可以,选择排序是依次比较两个元素,求得是最小值,冒泡排序是从头到尾依次比较两个相邻元素,求得是最大值。
public class SelectSortDemo { public static void main(String[] args){ //将数组arr定义为int类型的 int[] arr=new int[]{4,3,7,2,9,8,1}; printArr(arr); //输出使用选择排序之前的数组 selectSort(arr); printArr(arr); //输出使用选择排序之后的数组 } //输出为[1,2,3,4,7,8,9] static void selectSort(int[] arr){ /* //第一轮 for(int i=1;i<arr.length;i++){ if(arr[0]>arr[i]){ swap(arr,0,i); //使用arr,0,i是因为在数组中要想调换元素,必须根据数组的索引从头到尾都不会变的原则,即可以这样解释arr[0]=某个数,某个数可以赋值给 arr[0]的,这就是为什么不使用swap(arr[0],arr[i])的缘故。使用swap(arr[0],arr[i])从根本上是没有改变什么的,所以也不会 发生元素的调换,在数组中最重要的的注意元素的索引是固定的。所以不管调换元素值都要利用其索引。 } } //第二轮 for(int i=2;i<=arr.length-1;i++){ if(arr[1]>arr[i]){ swap(arr,1,i); } } //第三轮 for(int i=4;i<=arr.length-1;i++){ if(arr[2]>arr[i]){ swap(arr,2,i); } } */ //所以得出的最终结果是 for(int time = 1;time<=arr.length-1;time++){ //time代表的是第几个元素,相对应的time-1对应的是该元素的索引位置, for(int i=time;i<=arr.length-1;i++){ if(arr[time-1]>arr[i]){ swap(arr,time-1,i); } } } } //将数组元素进行交换 static void swap(int[] arr,int index1,int index2){ int temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; } //将数组元素进行打印 static void printArr(int[] arr){ String ret = "["; for(int i=0;i<arr.length;i++){ ret = ret + arr[i]; if(i!=arr.length-1){ ret = ret + ","; } } ret = ret + "]"; System.out.println(ret); }}
阅读全文
0 0
- 排序算法—选择排序
- 排序算法之选择排序——简单选择排序
- 数据结构&算法实践—【排序|选择排序】选择排序
- 排序算法1—插入排序、选择排序、冒泡排序
- 排序算法之——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——简单选择排序
- 排序算法总结——选择排序
- 内部排序算法——选择排序
- 排序算法2——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 经典排序算法——选择排序
- java基础知识点总结
- JS实现div随着鼠标移动
- VirtualBox中VboxGuestAddition的安装方法
- linux 创建内核线程
- Rx系列学习笔记_Rxjava的基本了解
- 排序算法——选择排序
- Qt学习01——字符串类
- 如何学习新技术
- Java线程 CompletionService
- java求质数,例子1-100
- ORACLE 查询高水位表 脚本
- ADO.NET学习之SqlDataAdapter,DataSet
- 特殊字符,# + %在url中传递,encode方式加密处理
- Android App异常退出时重新启动