java基本算法排序
2016-03-07 15:57
489 查看
基本算法排序
日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序、归并排序等,主要为使用内存的内部排序。
交换排序的基本思想是:两两比较待排序记录的排序码,并交换不满足顺序要求的那些偶对,直到满足条件为止。交换排序的主要方法有冒泡排序和快速排序。
冒泡排序的复杂度分析:冒泡排序是就地排序,是稳定的排序。它的基本思想就是通过与相邻元素的比较和交换来把小的数交换到最前。冒泡排序的时间复杂度为O(n*n)。
代码实现:
选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。选择排序的时间复杂度为O(n*n),是一种稳定的排序。
插入排序通过交换位置而是通过比较找到合适的位置插入元素来达到排序的目的的。
代码实现:
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要 小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归或者非递归进行,以此达到整个数据变成有序序列。快速排序的时间复杂度为O(nlogn)。
代码实现:
测试代码块:
日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序、归并排序等,主要为使用内存的内部排序。
交换排序的基本思想是:两两比较待排序记录的排序码,并交换不满足顺序要求的那些偶对,直到满足条件为止。交换排序的主要方法有冒泡排序和快速排序。
冒泡排序的复杂度分析:冒泡排序是就地排序,是稳定的排序。它的基本思想就是通过与相邻元素的比较和交换来把小的数交换到最前。冒泡排序的时间复杂度为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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树