(1)排序算法——选择排序
来源:互联网 发布:手机屏幕色彩校正软件 编辑:程序博客网 时间:2024/06/08 17:17
排序算法有很多,包括选择排序、插入排序、冒泡排序、合并排序、快速排序、堆排序等,这些算法各有优点。首先,我们先看下不同时间复杂度的区别:
选择排序算法是在列表中找到最小(大)数,并将其放在表头(尾),然后在剩下的数中找到最小(大)数,放到第一个数之后(最后一个数之前),这样一直做下去,直到列表中只剩一个数为止。选择排序算法的时间复杂度为O(n*n)(n为数据量)。
import java.util.ArrayList;import java.util.List;public class SelectionSort { /**对整型数组进行选择排序**/ public static void sort(int[] list){ int listLen=list.length; for(int i=0;i<listLen;i++){ int currentMin=list[i]; int currentMinIndex=i; for(int j=i+1;j<listLen;j++){ if(currentMin>list[j]){ currentMin=list[j]; currentMinIndex=j; } } if(currentMinIndex!=i){ list[currentMinIndex]=list[i]; list[i]=currentMin; } } } /**对浮点型数组进行选择排序**/ public static void sort(double[] list){ for(int i=0;i<list.length-1;i++){ double currentMin=list[i]; int currentMinIndex=i; for(int j=i+1;j<list.length;j++){ if(currentMin>list[j]){ currentMin=list[j]; currentMinIndex=j; } } if(currentMinIndex!=i){ list[currentMinIndex]=list[i]; list[i]=currentMin; } } } /**对Comparable基本Number包装类型数组进行选择排序 * 通过先找出最小数,将最小数放在前面来实现**/ public static void sort(Comparable[] list){ Comparable currentMin; int currentMinIndex; int listLen=list.length; for(int i=0;i<listLen-1;i++){ currentMin=list[i]; currentMinIndex=i; for(int j=i+1;j<listLen;j++){ //如果currenMin大于list[j] if(currentMin.compareTo(list[j])>0){ currentMin=list[j]; currentMinIndex=j; } } if(currentMinIndex!=i){ list[currentMinIndex]=list[i]; list[i]=currentMin; } } } /**对Comparable基本Number包装类型数组进行选择排序 * 利用泛型方法,通过先找出最大数来实现,将最大数放在后面**/ public static <E extends Comparable<E>> void selectionSort(E[] list) { int listLen=list.length; for (int i = listLen - 1; i >= 1; i--) { // Find the maximum in the list[0..i] E currentMax = list[0]; int currentMaxIndex = 0; for (int j = 1; j <= i; j++) { //如果currenMax小于list[j] if (currentMax.compareTo(list[j]) < 0) { currentMax = list[j]; currentMaxIndex = j; } } // Swap list[i] with list[currentMaxIndex] if necessary; if (currentMaxIndex != i) { list[currentMaxIndex] = list[i]; list[i] = currentMax; } } } /**对List进行选择排序**/ public static <E extends Comparable<E>> void selectionSort(List<E> list) { int listLen=list.size(); for (int i = listLen - 1; i >= 1; i--) { E currentMax = list.get(i); int currentMaxIndex = 0; for (int j = 1; j <= i; j++) { //如果currenMax小于list.get(j) if (currentMax.compareTo(list.get(j)) < 0) { currentMax = list.get(j); currentMaxIndex = j; } } if (currentMaxIndex != i) { list.set(currentMaxIndex,list.get(i)); list.set(i, currentMax); } } } /**对二维数组进行选择排序**/ public static void twoDimensionArraySort(int m[][]) { for (int i = 0; i < m.length; i++) { double currentMin = m[i][0]; int currentMinIndex = i; for (int j = i; j < m.length; j++) { if (currentMin > m[j][0] // primary sort || (currentMin == m[j][0] && m[currentMinIndex][1] > m[j][1])) // secondary sort { currentMin = m[j][0]; currentMinIndex = j; } } // Swap list[i] with list[currentMinIndex] if necessary; if (currentMinIndex != i) { int temp0 = m[currentMinIndex][0]; int temp1 = m[currentMinIndex][1]; m[currentMinIndex][0] = m[i][0]; m[currentMinIndex][1] = m[i][1]; m[i][0] = temp0; m[i][1] = temp1; } } } /**主函数测试**/ public static void main(String[] args){ Integer[] array={1,45,2,5,546,34}; List<Integer> list=new ArrayList(); for(int i: array){ list.add(i); } selectionSort(list); System.out.println(list); selectionSort(array); print(array); } /**打印数组**/ public static void print(Comparable[] list){ for(int i=0;i<list.length;i++){ System.out.print(list[i]+" "); } System.out.println(); }}
0 0
- 排序算法1—插入排序、选择排序、冒泡排序
- 排序算法(1)——选择排序
- 排序算法—选择排序
- (1)排序算法——选择排序
- java排序算法(1)—选择排序
- 常用的排序算法性能分析(1)—— 选择排序、插入排序、希尔排序
- 【算法】排序算法(一)——选择排序
- 排序算法之选择排序——简单选择排序
- 数据结构&算法实践—【排序|选择排序】选择排序
- 排序算法之——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——简单选择排序
- 排序算法总结——选择排序
- 内部排序算法——选择排序
- 排序算法2——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 哲学家就餐问题
- NOIP2013P4 车站分级 题解
- 自动repo sync脚本
- MYSQL 5.7.11解压版配置
- Arduino Uno 硬件电路
- (1)排序算法——选择排序
- 蓝桥杯 PREV-9大臣的旅费(深搜)
- traceroute命令用法
- Linux内核分析:实验四--使用嵌入汇编系统调用
- AFNetworking - 解决办法
- 快速排序法算法巧解
- iOS基础之文件读写
- {小结}USACO NOV06
- HTTP 网络请求一般格式 YUQNetwork