java实现选择排序完整代码
- 选择排序
- 原理:从无序区间中找到最大(最小)的元素,将其放于无序区间的后面(前面),直到所有无序区间内的元素排完后,排序结束
- 插入排序是一个不稳定的排序
实现方式
- 单向选择排序
- 遍历无序区间选择出最大的值,放在无序列表的后面
- 代码:
public void selectSort(int[] array) { for(int i = 0; i < array.length - 1; i++) { //无序区间是[0, array.length - i) //有序区间是[array.length - i, array.length) int max = 0; for(int j = 0; j < array.length - i; j++) { if(array[j] > array[max]) { max = j; } } int tmp = array[max]; array[max] = array[array.length - 1 - i]; array[array.length - 1 - i] = tmp; } }
双向选择排序
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、虚拟空间、营销软件、网站建设、南城网站维护、网站推广。
- 遍历无序区间,找出无序区间中的最大值和最小值,将最小值放在无序区间的前面,将最大值放在无序区间的后面,直到将无序区间的元素都排完
代码:
public void selectSortOP(int[] array) { int left = 0; int right = array.length - 1; while(left <= right) { int min = left; int max = left; //遍历无序区间,找到最大值和最小值的下标 for(int i = left + 1; i <= right; i++) { if(array[i] > array[max]) { max = i; } if(array[i] < array[min]) { min = i; } } swap(array, min, left); //判断最大的值是否在最左侧,如果是在最左侧的话由于最小的元素已经和他进行了交换,此时最大值的下标就 //不再是left,而是交换后的min if (max == left) { max = min; } swap(array, max, right); left++; right--; } } private void swap(int[] array, int i, int j) { int tmp = array[i]; array[i] = array[j]; array[j] = tmp; }
性能分析
- 时间复杂度:O(N^2)
- 空间复杂度:O(1)
- 稳定性:不稳定
本文标题:java实现选择排序完整代码
当前URL:http://pwwzsj.com/article/ppgpjp.html