java_选择排序
来源:互联网 发布:人工智能股票龙头科大 编辑:程序博客网 时间:2024/06/05 15:29
蛮力法之选择排序
选择排序:有n个数的数列,需要对它进行从小到大排列。
第一次对n个数进行扫描,找到最小的数ai,将ai与a0进行交换,那么n个数里面最小的数排在了第一个,找到了自己的位置。
第二次对n-1个数进行扫描(排除已经找到位置的第一个数),找到最小的数ai,将ai与a1进行交换,那么n-1个数里面最小的数排在了整个数列的第二个,找到了自己的位置。
……
以此类推,就可以将整个数列从小大大进行排序
伪代码:
SelectionSort(A[0...n-1]
for i <-0 to n-2 do
min <- i
for j <-i+1 to n-1 do
if A[j] <A[min] min <- j
swap A[i] and A[min]
例子:数列{89,45,68,90,29,34,17}
public class SelectionSort {private int[] numbers = {89,45,68,90,29,34,17};private void sort(){int length = numbers.length;int min = 0;for(int i = 0; i < length-1; i ++){min = i;for(int j = i + 1; j < length; j ++){if(numbers[min] > numbers[j]){min = j;}}swap(i, min);printNumbers(i);}}private void swap(int i, int j){int temp;temp = numbers[i];numbers[i] = numbers[j];numbers[j] = temp;}private void printNumbers(int count){System.out.print(count+" : ");for(int i = 0; i < numbers.length; i++){System.out.print(numbers[i]+" ");}System.out.println();}public static void main(String[] args) {(new SelectionSort()).sort();}}0 : 17 45 68 90 29 34 89
1 : 17 29 68 90 45 34 89
2 : 17 29 34 90 45 68 89
3 : 17 29 34 45 90 68 89
4 : 17 29 34 45 68 90 89
5 : 17 29 34 45 68 89 90
算法复杂性:
每次扫描:j=i+1 到 j=n-1 ,每次比较 numbers[min] > numbers[j] 为 “1”
那么总的为 比较次数个1的和(n-1)-(i+1)+1=(n-1-i)
扫描了n-1次:求(n-1-i) i为 0~n-2
(n-1+1)*(n-1)/2=(n-1)*n/2
选择排序的键值交互次数为:n(一遍扫描完了后才需要进行交换)
- java_选择排序
- JAVA_选择排序、冒泡排序
- Java_冒泡、插入、快速、选择排序
- JAVA_三大排序_选择冒泡插入
- java_排序
- Java_排序
- Java_比较和排序
- java_冒泡排序
- JAVA_希尔排序
- JAVA_数组排序方法
- JAVA_快速排序
- java_冒泡排序
- java_排序_查找
- java_归并排序
- Java_快速排序
- java_堆排序
- java_文件名排序
- Java_数组操作_排序
- 用p6spy完整显示hibernate的SQL语句_转
- [Leetcode] Combination Sum II
- http mock service
- 面向对象
- 解决OpenCv中没有找到tbb_debug.dll的方法+OpenCv项目环境配置
- java_选择排序
- java中replaceAll和split的反斜杠("\")问题
- priority_queue的用法总结
- myeclipse启动报无虚拟环境解决方法
- 推荐给开发人员的实用命令行工具
- Strut2转换器
- 求二进制数的掩码
- 在Hadoop中提升task的启动速度
- C/C++编译过程详解