几个简单的排序算法(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");}}



原创粉丝点击