排序算法(一)
注:以下排序算法都按从小到大的顺序排序
1.冒泡排序
(1)算法思想:从数组中的第一个元素开始,依次比较相邻两个元素之间的大小,将较小的元素排在前面,这样每轮会在数组末尾选出一个最大的数,一共需要比较N-1轮(N为数组长度)。
(2)代码实现:
import java.util.Arrays; public class Demo02 { public int[] sortArray(int[] A){ int temp = 0; for(int i=0; i<A.length; i++){ for(int j=0; j<A.length-i-1; j++){ if(A[j]>A[j+1]){ temp = A[j]; A[j] = A[j+1]; A[j+1] = temp; } } } // System.out.println(Arrays.toString(A)); return A; } public static void main(String[] args){ int[] A = {1,16,4,9,20,45}; Demo02 demo02 = new Demo02(); demo02.sortArray(A); } }
(3)时间复杂度:O(n^2)
(4)动图演示:
2.选择排序
(1)算法思想:将待排序数组分为两部分,一部分为已排序,另一部分为未排序,第一轮在未排序的数组中找出一个最小元素,放入到数组的起始端,作为已排序数组,之后每一轮都将未排序数组中的最小值依次放到已排序数组的末端。
(2)代码实现:
public int[] sortArray(int[] A) { int temp = 0; for (int j = 0; j < A.length; j++) { int minNum = j; for (int i = j + 1; i < A.length-1; i++) { if (A[minNum] > A[i]) minNum = i; } temp = A[minNum]; A[minNum] = A[j]; A[j] = temp; } return A; } public static void main(String[] args){ int[] A = {1,16,4,9,20,45}; Demo02 demo02 = new Demo02(); demo02.sortArray(A); System.out.println(Arrays.toString(A)); } }
(3)时间复杂度:O(n^2)
(4) 动图演示: