您的位置:首页 > 编程语言 > Java开发

java基本算法排序

2016-03-07 15:57 489 查看
基本算法排序

日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序、归并排序等,主要为使用内存的内部排序。

交换排序的基本思想是:两两比较待排序记录的排序码,并交换不满足顺序要求的那些偶对,直到满足条件为止。交换排序的主要方法有冒泡排序和快速排序。

冒泡排序的复杂度分析:冒泡排序是就地排序,是稳定的排序。它的基本思想就是通过与相邻元素的比较和交换来把小的数交换到最前。冒泡排序的时间复杂度为O(n*n)。

代码实现:

public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length-1; j > i; j--) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}


选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。选择排序的时间复杂度为O(n*n),是一种稳定的排序。
插入排序通过交换位置而是通过比较找到合适的位置插入元素来达到排序的目的的。
代码实现:

public static void insertSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int temp = arr[i], j = 0;
for (j = i; j>0 && temp < arr[j-1]; j--) {
arr[j] = arr[j-1];
}
arr[j] = temp;
}
}


快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要 小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归或者非递归进行,以此达到整个数据变成有序序列。快速排序的时间复杂度为O(nlogn)。
代码实现:

public static void quickSort(int[] arr, int start, int end) {
if (start < end) {
int partition = arr[start];
int i = start, j = end;
do {// arr[i] partition arr [j]
while (partition > arr[i] && i < end)    i++;
while (partition < arr[j] && j > start)  j--;
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
} while (i <= j);
if (i < end) quickSort(arr, i, end);
if(j > start) quickSort(arr, start, j);
}
}


测试代码块:

import java.util.Scanner;

public class TestSort {

//创建一个长度为n的整形数组
public static int[] array(int n) {
if (n <= 0) {
System.out.println("待数组长度应至少为1。");
return null;
} else {
int[] arr = new int
;
for( int i = 0; i < n; i++) {
arr[i] = (int) (Math.random()*100+1);
}
return arr;
}
}

//打印数组
public static void show(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i != arr.length-1) {
System.out.print(arr[i] + " ");
} else {
System.out.println(arr[i]);
}
}
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int num = in.nextInt();
int[] data = array(num);
if (data != null) {
show(data);
//              bubbleSort(data);
//              selectSort(data);
//              insertSort(data);
//              quickSort(data,0, data.length-1);
show(data);
}
}
in.close();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java