常见的算法题:排序
排序分为很多种类,最常见的有冒泡排序法,简单排序法,直接插入排序法等几种排序法;
冒泡排序法,是排序中最简单和最常见的排序法。
冒泡排序法是将相邻的元素两两进行比对,将逆序的元素进行交换就行。
时间复杂度:O(n^2)
代码如下:
public class BubbleSort { public static void main(String[] args) { // int[] arr = {2,8,5,7,3,1,10,11,6}; int[] arr = {2,3,5,7,8,1,10,11,6}; System.out.println(Arrays.toString(arr)); bubbleSort01(arr); } //通用,用于数据交换 public static void swap(int[] arr , int i ,int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } //冒泡排序法:方法一 public static void bubbleSort01(int[] arr){ int i,j; boolean flag = true; for( i=0 ; i<arr.length && flag ; i++ ){ flag = false ;//每次都调整成为false,如果一遍遍历后,没有变成true,那说明没有 for( j=arr.length - 2 ; j > i-1 ; j-- ){ if(arr[j] > arr[j+1] ){ flag = true; swap( arr , j , j+1 ); } } System.out.println(Arrays.toString(arr)); } } //冒泡排序法:方法二 public static void bubbleSort02(int[] arr){ int i,j; boolean flag = true; for( i=1 ; i<arr.length && flag ; i++ ){ flag = false ;//每次都调整成为false,如果一遍遍历后,没有变成true,那说明没有 for( j = 0; j < arr.length - i ; j++ ){ if(arr[j] > arr[j+1] ){ flag = true; swap( arr , j , j+1 ); } } System.out.println(Arrays.toString(arr)); } } }
以第二种冒泡方法遍历为例:
第一轮排序
第二轮排序
第三轮排序
说明:
设置标识flag,在每一轮遍历之前,将值设置成false;
如果进行了交换,设置为true,如果没有则不变(说明剩下的元素是有序的,不用进行排序);
如果flag为true,则再次进行遍历,否则结束遍历;