几个简单的排序算法(java版)
来源:互联网 发布:无线连接网络打印机 编辑:程序博客网 时间:2024/06/10 07:47
前言
几个简单的排序算法(java版),这里主要介绍冒泡算法、选择排序、插入排序算法及简单的java代码实现。
内容
1. 冒泡排序算法
冒泡排序是最简单的排序算法,基本的算法思想:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
算法步骤如下:
1) 假设有待排序的队列元素N个;
2) 设置参数out = N-1 ;
3) 设置参数 i = 0;
4) 将Ni(第i个元素)与Ni+1(第i+1个元素)作比较,如果Ni>Ni+1则交换位置;
5) i加1,重复4)步,直到i= out – 1;
6) 置out = N – 2,重复3)、4)、5)步骤,直到out = 1,算法结束;
java实现代码如下:
package learn.sort;/*** @Description: 冒泡排序* @author 柯颖波* @date Jul 31, 2013 3:25:46 PM * @version v1.0 */public class BubbleSort {private int datas[];// 存放排序数的数组private int index;// 数组索引public BubbleSort(int max) {datas = new int[max];index = 0;}// 插入单个数据public void insertData(int data) {datas[index++] = data;}// 打印数组public void display() {for (int i = 0; i < index; i++) {System.out.print(" " + datas[i]);}System.out.println("");}// 执行排序,指定升序或降序public void sort() {for (int i = index - 1; i > 0; i--) {for (int j = 0; j < i; j++) {if (datas[j] > datas[j + 1]) {int temp = datas[j];datas[j] = datas[j + 1];datas[j + 1] = temp;}}}}public static void main(String[] args) {BubbleSort arr = new BubbleSort(10);arr.insertData(2);arr.insertData(3);arr.insertData(5);arr.insertData(6);arr.insertData(1);arr.insertData(8);arr.insertData(6);arr.insertData(6);arr.insertData(9);System.out.println("排序前:");arr.display();arr.sort();System.out.println("排序后:");arr.display();}}
2. 选择排序算法
选择排序的算法思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。
算法步骤如下:
1) 假设有待排序的队列元素N个;
2) 设置参数out = N-1 ;
3) 设置参数 i = 0;
4) 设置参数 max = Ni,maxIndex = I;
5) 将Ni(第i个元素)与Ni+1(第i+1个元素)作比较,如果Ni+1>Ni则max =Ni+1;maxIndex = i+1;
6) in加1,重复5)步,直到i = out – 1则N(out)与N(maxIndex)元素作交换;
7) 置out = N – 2,重复3)、4)、5)步骤,直到out = 1,算法结束;
java实现代码如下:
package learn.sort;/*** @Description: 选择排序* @author 柯颖波* @date Jul 31, 2013 3:25:46 PM * @version v1.0 */public class SelectionSort {private int datas[];// 存放排序数的数组private int index;// 数组索引public SelectionSort(int max) {datas = new int[max];index = 0;}// 插入单个数据public void insertData(int data) {datas[index++] = data;}// 打印数组public void display() {for (int i = 0; i < index; i++) {System.out.print(" " + datas[i]);}System.out.println("");}// 执行排序,指定升序或降序public void sort() {for (int i = index - 1; i > 0; i--) {int max = datas[i];int maxindex = i;for (int j = 0; j < i; j++) {if (datas[j] > max) {max = datas[j];maxindex = j;}}datas[maxindex] = datas[i];datas[i] = max;}}public static void main(String[] args) {SelectionSort arr = new SelectionSort(10);arr.insertData(2);arr.insertData(3);arr.insertData(5);arr.insertData(6);arr.insertData(1);arr.insertData(8);arr.insertData(6);arr.insertData(6);arr.insertData(9);System.out.println("排序前:");arr.display();arr.sort();System.out.println("排序后:");arr.display();}}
3. 插入排序算法
插入排序算法思想:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置。
算法步骤:
1) 从有序数列和无序数列{a2,a3,…,an}开始进行排序;
2) ⒉处理第i个元素时(i=2,3,…,n),数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。用ai与ai-1,a i-2,…,a1进行比较,找出合适的位置将ai插入;
3) ⒊重复第二步,共进行n-i次插入处理,数列全部有序。
java实现代码如下:
package learn.sort;import java.util.Random;import sun.misc.Sort;import com.sun.rsasign.a0;/** * @Description: 插入排序 * @author 柯颖波 * @date Jul 31, 2013 3:25:46 PM * @version v1.0 */public class InsertSort {private int datas[];// 存放排序数的数组private int index;// 数组索引public InsertSort(int max) {datas = new int[max];index = 0;}// 插入单个数据public void insertData(int data) {datas[index++] = data;}// 打印数组public void display() {for (int i = 0; i < index; i++) {System.out.print(" " + datas[i]);}System.out.println("");}// 执行排序public void sort() {// 方式1/*for (int i = 1; i < index; i++) {int insertIndex = i;int temp = datas[i];for (int j = 0; j < i; j++) {if (datas[j] > datas[i]) {insertIndex = j;break;}}for (int j = i; j > insertIndex; j--) {datas[j] = datas[j - 1];}datas[insertIndex] = temp;}*/// 方式2for (int i = 1; i < index; i++) {int insertIndex = i;int temp = datas[i];while (insertIndex > 0 && datas[insertIndex - 1] > temp) {datas[insertIndex] = datas[insertIndex - 1];//System.out.println("交换");insertIndex--;}datas[insertIndex] = temp;}}public static void main(String[] args) {int max = 100;InsertSort arr = new InsertSort(max);for (int i = 0; i < max; i++) {arr.insertData((int)Math.random()*(max -1));}arr.sort();arr.display();System.out.println("end");}}
- 几个简单的排序算法(java版)
- 几个简单的排序算法
- 几个简单的排序算法
- 几个简单的排序算法
- 几个简单的排序算法
- 几个内部排序算法的总结(JAVA版)
- 几个简单排序算法
- 几个简单的排序算法实现
- 几个排序算法的java实现
- java实现的几个常用排序算法
- 几个排序算法的Java实现
- java的简单排序算法
- 几个简单的排序
- lua 实现的几个简单的排序算法
- 几个简单的算法
- JAVA中的几个排序算法
- Java 常见 几个排序算法
- 数据结构Java版的排序算法的简单实现
- 2013 - ECJTU 暑期训练赛第六场-problem-I
- linux下GCC编译器
- uva 10305 Ordering Tasks(拓扑排序)
- hdu 3711
- 7月份的学习汇报
- 几个简单的排序算法(java版)
- 图的匹配问题与最大流问题(五)——计算二分图的最大匹配
- JS创建对象的几种方法
- Python中的*args和**kwargs
- SQL SERVER 插入大批量数据有无索引的效率对比
- Longest Valid Parentheses
- uva 10294 - Arif in Dhaka (First Love Part 2) Polya定理
- java之正则表达式
- 杭电4148-Length of S(n)