基本排序方法
来源:互联网 发布:农村淘宝怎么下载 编辑:程序博客网 时间:2024/06/16 06:44
public class SimpleSort { /* 二分查找:在有序的数组中查找元素。如 1 2 3 4 5 7 8 9 查找 5 将数组的中间元素与5比较,然后分成两半,可以得到5在 5 7 8 9中,在循环上面的操作。 T(n) = T(n/2) + θ(1),时间复杂度为O(logn) */ public int binarySearch(int[] a, int key) { int lower = 0; int upper = a.length - 1; while (true) { int mid = (lower + upper) / 2; if (lower > upper) //该条件必须在前面 return -1; else if (a[mid] == key) return mid; else if (a[mid] > key) upper = mid - 1; else if (a[mid] < key) lower = mid + 1; } } public int binaryFind(int[] a, int lower, int upper, int key) { int mid = (lower + upper)/2; if (lower > upper) return -1; else if (a[mid] == key) return mid; else if(a[mid] > key) return binaryFind(a, lower, mid-1, key); else return binaryFind(a, mid+1, upper, key); } /* 选择排序:有一组数5 1 9 22 20 74 8 19,分别固定前面的位置,并将该位置的 数与后面的数比较,交换位置把最小或者最大的数放在该索引位上。 */ public void selectSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { //0到n-2的位置固定 for (int j = i+1; j < a.length ; j++) { if (a[i] > a[j]) swap(a,i,j); } } } /* 冒泡排序:和选择排序不同的地方在于,冒泡排序是相邻元素比较,一轮比较确定一个位置 如 25 15 2 15 68 35 99 8,一轮比较后25 15 2 15 68 35 8 99,二轮25 15 2 15 35 8 68 99 */ public void bubbleSort(int[] a) { for (int i = a.length - 1; i >= 1; i--) { //把i当成固定的位置 for (int j = 0; j < i; j++) { //比较的元素范围为0到i,j+1=i if (a[j] > a[j+1]) swap(a,j,j+1); } } } /* 插入排序:5 58插入38,变成5 38 58,插入8,变成5 8 38 58,插入28,变成5 8 28 38 58 插入排序假设已有的数有序,插入的元素分别与已有的数比较,如5 8 38 58中插入28, 28插入到8和38之间,这时将比28大的数的索引右移一位,插入的位置赋值28. */ public void insertSort(int[] a) { for (int i = 1; i < a.length; i++) { //初始a[0]有序,插入a[i]// int tmp = a[i];// int j = i;// while (j > 0 && tmp < a[j-1]) {// a[j] = a[j-1];// j--;// }// a[j] = tmp; int tmp = a[i]; int index = -1; for (int j = i-1; j >= 0 ; j--) { if (tmp < a[j]) { //与a[j]比较的tmp保持不变 a[j+1] = a[j]; index = j; //记录插入位置的索引 } } if (index != -1) a[index] = tmp; } } public void swap(int[] a, int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } public void display(int[] a) { for (int i = 0; i < a.length; i++) { System.out.print(a[i] + "\t"); } System.out.println(); } public static void main(String[] args) { int[] a = {1, 2, 3, 4, 5, 7, 8, 9}; SimpleSort sort = new SimpleSort(); int i = sort.binarySearch(a, 5); System.out.println(i); //i=4 int j = sort.binaryFind(a,0,a.length-1,20); System.out.println(j); //-1 int[] b = {5, 1, 9, 22, 20, 74, 8, 19}; System.out.print("选择排序前:"); sort.display(b); //选择排序前:519222074819 sort.selectSort(b); System.out.print("选择排序后:"); sort.display(b); //选择排序后:158919202274 int[] c = {25, 15, 2, 15, 68, 35, 99, 8}; System.out.print("冒泡排序前:"); sort.display(c); //冒泡排序前:25152156835998 sort.bubbleSort(c); System.out.print("冒泡排序后:"); sort.display(c); //冒泡排序后:28151525356899 int[] d = {18, 115, 12, 27, 8, 35, 99, 16}; System.out.print("插入排序前:"); sort.display(d); //插入排序前:1811512278359916 sort.insertSort(d); System.out.print("插入排序后:"); sort.display(d); //插入排序后:8121618273599115 }}
阅读全文
1 0
- JAVA基本排序方法
- 基本排序方法
- 几种最基本的排序方法
- 排序3中基本方法
- 8种基本排序方法
- 基本的排序方法实现
- 三种最基本的排序方法
- 基本排序方法(c++)
- 《C算法》——基本排序方法
- 谈谈搜索引擎排序的一些基本方法
- 黑马程序员--C语言基本排序方法
- 基本排序方法的性能特征
- java数组基本的排序方法
- OC数组排序的基本方法
- OC 基本的便利排序方法
- PHP的四种基本排序方法
- php的基本算法 和排序方法
- javascript实现数据结构中的基本排序方法
- 1811 Matrix Calculation (eden)
- 沉浸式状态栏
- python中的_name_=='_main_'的作用
- 第2章 在 HTML 中使用 JavaScript 关于CData的那些事
- app缓存数据的大小和清除
- 基本排序方法
- 以太坊客户端区块数据磁盘地址调整
- jquery自定义插件
- 第十五周(Add Two Numbers)
- 95. Unique Binary Search Trees II
- Linux下的用户权限
- 获取清单文件的信息
- JVM学习03:运行时数据区域-JAVA虚拟机栈
- 网络与信息安基本全名词解释汇总