1、冒泡排序
基本思想:
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
import java.util.Scanner; public class BubbleSort { public static void main(String[] args) { int len; System.out.println("请输入数组的长度!"); Scanner sc = new Scanner(System.in); len = sc.nextInt(); int[] arr = new int[len]; for (int i = 0; i < arr.length; i++) { System.out.println("请输入第"+i+"个值"); arr[i] = sc.nextInt(); } show(arr); System.out.println("排序后:"); show(sort(arr)); } //打印数组 public static void show(int[] arr) { System.out.println("输出当前数组:"); for (int i = 0; i < arr.length; i++) { System.out.println(i+"----"+arr[i]); } } //冒泡排序 public static int[] sort(int[] arr) { int swap; for (int i = 0; i < arr.length-1; i++) { for (int j = 0; j < arr.length-i-1; j++) { if(arr[j]>arr[j+1]){ swap = arr[j+1]; arr[j+1] = arr[j]; arr[j] = swap; } } } return arr; } }
2、简单选择排序
基本思想:
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
public class SelectionSort { private static int[] paixu(int[] arr) { for (int i = 0; i < arr.length-1; i++) { for (int j = i; j < arr.length-1; j++) { if (arr[i]>arr[j+1]) { swap(arr,i,j+1); } } } return arr; } public static int[] swap(int[] arr,int x,int y) { int swap; swap = arr[x]; arr[x] = arr[y]; arr[y] = swap; return arr; } private static void dayin(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } } public static void main(String[] args) { int[] arrTest = {4,2,1,6,3,6,0,-5,1,1}; System.out.println("前:"); dayin(arrTest); System.out.println(); System.out.println("后:"); dayin(paixu(arrTest)); } }
3、插入排序
public class SelectSort { public static void selectSort(int[] arr) { for (int i = 1; i < arr.length; i++) { for (int j = i;(j>0)&&(arr[j]<arr[j-1]);j--) { swap(arr,j,j-1); } } } public static void swap(int[] arr,int x,int y) { int swap; swap = arr[x]; arr[x] = arr[y]; arr[y] = swap; } public static void main(String[] args) { int[] a = {4,2,6,1,3,6}; selectSort(a); for(int i=0;i<a.length;i++){ System.out.println(a[i]); } } }
解析:如果目标是把n个元素的序列排序:最好的情况就是序列已经升序排列了,在这种情况下,需要进行n-1次比较操作即可。最坏就是降序排列,此时需要比较的次数是n(n-1)/2;