(冒泡排序)大学里面最早接触的一种排序
基本原理
* 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 * 针对所有的元素重复以上的步骤,除了最后一个。 * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码实现
public static void bubbleSort(int number[]) { for (int i = 0; i < number.length-1; i++) for (int j = 0; j < number.length-i-1; j++) { if(number[j]>number[j+1]){ int temp=number[j]; number[j]=number[j+1]; number[j+1]=temp; } } }
选择排序
基本思想
在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
代码实现
public static void selectSort(int number[]){ for(int i=0;i<number.length;i++){ int minIndex=i; //标注最小值,初始为i for(int j=i;j<number.length;j++){ if(number[j]<number[minIndex]){ minIndex=j; //遍历i之后的数组,找到最小的数 } } int temp=number[i]; number[i]=number[minIndex]; number[minIndex]=temp; //将i和最小的交换 } }
快速排序
基本思想
通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。
代码实现思路
把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交换。这样循环往复,一趟排序完成,左边就是比中轴小的,右边就是比中轴大的,然后再用分治法,分别对这两个独立的数组进行排序。
代码实现(递归实现)
public static void quickSort(int number[],int low,int high){ if(low<high){ int middle=findMiddle(number,low,high); //将low放在数组中间位置,low前面的比它小,low后面的比它大 quickSort(number, low, middle); //分治再次进行快速排序 quickSort(number, middle+1, high); } } public static int findMiddle(int number[],int low,int high){ int temp=number[low]; //将数组的low位置的数看做中轴 while(low<high){ while(low<high&&number[high]>=temp){ high--; //从后往前数找到第一个比temp小的,这里一定要>=,不然如果数组中有相同的会出现stackOverFlow错误 } number[low]=number[high]; //把那个大的数字放到low的位置上 while(low<high&&number[low]<=temp){ //从前往后数找到第一个比temp大的,这里一定要<=,不然如果数组中有相同的会出现stackOverFlow错误 low++; } number[high]=number[low]; //把那个大的数字放到high的位置上 } number[low]=temp; //将中轴数放到low或者high上,此时low应等于high return low; }
插入排序
- 基本思想
每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。
代码实现思路
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置中
代码实现
//插入排序 public static void insertSort(int number[]){ for(int i=0;i<number.length;i++){ int temp=number[i]; int j; for(j=i;j>0&&number[j-1]>temp;j--){ number[j]=number[j-1]; } number[j]=temp; } }
常用排序算法的Java实现
最新推荐文章于 2024-04-18 17:00:00 发布