八种排序
一、冒泡排序
基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
实现:
public class BubbleSort {
//依次比较两个数,如果前一个比后一个大则交换
public static void bubbleSort(int[] nums){
int temp;
//最后一个不需要去比较
for (int i = 0; i < nums.length-1; i++) {
//nums.length-1-i排除已经比较过的
for (int j = 0; j < nums.length-1-i; j++) {
if(nums[j]>nums[j+1]){
temp = nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
}
//测试
public static void main(String[] args) {
int[] nums = {6,3,5,4,1};
bubbleSort(nums);
}
}
结果:
1 3 4 5 6
二、快速排序
基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分
实现:
public class QuickSort {
public static int getMid(int[] nums,int low,int high){
int temp=nums[low];
while(low<high){
while(low<high && nums[high]>temp){
high--;
}
nums[low]=nums[high];//如果右边小于中间数 移动到左边
while(low<high && nums[low]<temp){
low++;
}
nums[high]=nums[low]; //如果左边有大于中间数 的数移动到右边
}
nums[low]=temp; //赋值中间数
return low;
}
public static void quick(int[] nums , int low,int high){
if(low<high){
int mid = getMid(nums,low,high);
//递归调用左右两边继续排序
quick(nums,low,mid-1);
quick(nums,mid+1,high);
}
}
public static void main(String[] args) {
int[] nums = {22,11,33,66,77,55,44,99,88};
quick(nums,0,nums.length-1);
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
}
}
三、直接插入排序
基本思路:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止
1 从第一个元素开始,该元素可以认为已经被排序 2 取出下一个元素,在已经排序的元素序列中从后向前扫描 3 如果该元素(已排序)大于新元素,将该元素移到下一位置 4 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 5 将新元素插入到该位置中 6 重复步骤2
public class Inset_sort {
public static void insert_sort(int[] nums){
int temp; //定义变量存储每次插入的值
int j; //j为i前一个数
for (int i = 1; i < nums.length; i++) { //从数组第二个元素开始循环
temp = nums[i];
j=i-1;
while(j>=0 && temp<nums[j]){ //当前一个数在数组内并且前一个数大于要插入的数
nums[j+1]=nums[j]; //前一个数向后移动一位
j--; //继续向前比较
}
nums[j+1]=temp; //当要插入的值大于前一位的时候代表位置正确,就放在前一位的后面
}
}
public static void main(String[] args) {
int[] nums = {2,1,6,5,3,4,7};
insert_sort(nums);
for (int i : nums) {
System.out.print(i+"");
}
}
}