数据结构学习之选择排序
2016-03-18 14:44
651 查看
package datastructure; class ArraySel{ private long[] a; private int nElems; public ArraySel(int max) { a = new long[max]; nElems = 0; } public void insert(long value) { a[nElems] = value; nElems++; } public void display() { for (int j = 0; j < nElems; j++) { System.out.print(a[j] + " "); } System.out.println(" "); } public void selectionSort() { int min; for (int out = 0; out < nElems - 1; out++) { min = out; for (int in = out + 1; in < nElems ; in++){ if (a[in] < a[min]) min = in; } swap(out,min); } } private void swap(int n1,int n2){ long temp = a[n1]; a[n1] = a[n2]; a[n2] = temp; } } public class selectSort { public void main(String[] args) { ArraySel arr = new ArraySel(100); arr.insert(77); arr.insert(88); arr.insert(44); arr.insert(55); arr.insert(22); arr.insert(99); arr.insert(11); arr.insert(00); arr.insert(66); arr.insert(33); arr.display(); arr.selectionSort(); arr.display(); } }
与冒泡排序不同的地方在于,此排序是讲整个数据项的最小项找出后,与第一个数组项交换,从而完成排序。
out=0,min=out,此时的最小是为a[0],然后内层循环用来找最小的数据项,然后将它与a[0]交换,内层循环结束,外层中的out自增1,直到循环结束。
选择排序的效率
选择排序和冒泡排序都小号了相同的时间,即O(N^2),但是在交换次数上少了很多。当N较大的时候,比较的次数是主要的,但是当N比较小的时候,特别是在交换的时间级比比较的时间级大的多的时候,选择排序实际上是相当快的。相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)