Java排序算法一
前言
Java小白分享学习算法
一、冒泡排序
冒泡排序(Bubble Sort)就是把小的元素往前调或者把大的元素往后调从而实现从小到大的排序。
依次比较相邻的两个元素大小,若前一个元素大于后一个元素,则交换两个元素,每次比较一轮将最大的一个元素归位(即放到最后)。
import java.util.Arrays;
/*冒泡排序*/
public class example1 {
public static void main(String[] args) {
int[] bubbleNums = {25, 63, 78, 45, 132, 7};
System.out.println("排序之前:" + Arrays.toString(bubbleNums));
bubbleSort(bubbleNums);
System.out.println("排序之后:" + Arrays.toString(bubbleNums));
}
public static void swap(int[]nums,int i){
int temp=nums[i+1];
nums[i+1]=nums[i];
nums[i]=temp;
}
private static void bubbleSort(int[] nums){
for(int i=1;i<nums.length;i++){
for(int j=0;j<nums.length-i;j++) {
if (nums[j] > nums[j + 1])
swap(nums, j);
}
System.out.print("第" + i + "次排序:");
System.out.println(Arrays.toString(nums));
}
}
}
运行效果
二、选择排序
选择排序(Selection Sort)是一种简单直观的排序算法。首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。
import java.util.Arrays;
/*选择排序*/
public class example2 {
public static void main(String[] args) {
int[] selectNums = {25, 63, 78, 45, 132, 7};
System.out.println("排序之前:" + Arrays.toString(selectNums));
selectSort(selectNums);
System.out.println("排序之后:" + Arrays.toString(selectNums));
}
public static void swap(int[]nums,int i,int j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
public static void selectSort(int[] nums){
for(int i=0;i<nums.length-1;i++){
int temp=i;
for(int j=i+1;j<nums.length;j++){
if(nums[j]<nums[temp])
swap(nums,j,temp);
}
System.out.println("第"+i+"次排序:"+Arrays.toString(nums));
}
}
}
运行效果
三、插入排序
插入排序(Insert Sort)就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。
import java.util.Arrays;
public class example3 {
public static void main(String[] args) {
int[] insertNums = {5, 3, 18, 15, 32, 7};
System.out.println("排序之前:" + Arrays.toString(insertNums));
insertSort(insertNums);
System.out.println("排序之后:" + Arrays.toString(insertNums));
}
public static void insertSort(int[] nums){
for(int i=1;i<nums.length;i++){
int k=nums[i];
int j=i-1;
while(j>=0&&nums[j]>k){
nums[j+1]=nums[j];
j--;
}
nums[j+1]=k;
System.out.println("第"+i+"次排序:"+Arrays.toString(nums));
}
}
}
运行效果
四、快速排序
快速排序(Quick Sort)的基本思想:通过一次排序将待排序元素分割成两个独立的部分,其中一部分元素都要比另一部分小,之后对两部分分别排序,最终得到一个有序数列。
算法描述:
1.从数列中选择一个元素作为“基准”,即分割数列
2.排列数列,将所有小于“基准”的元素全都放到左边,将大于“基准”的元素全部放到右边
3.将分割的部分分别递归的排序
import java.util.Arrays;
/*快速排序*/
public class example4 {
public static void main(String[] args) {
int[] quickNums = {25, 63, 18, 29, 26, 78, 45, 132, 7};
System.out.println("排序之前:" + Arrays.toString(quickNums));
quickSort(quickNums);
System.out.println("排序之后:" + Arrays.toString(quickNums));
}
public static int position(int[] nums, int low, int high) {
int i = low;
int j = high;
int x = nums[low];
while (i < j) {
while (nums[j] >= x && i < j) {
j--;
}
if (i < j) {
nums[i] = nums[j];
i++;
}
while (nums[i] < x && i < j) {
i++;
}
if (i < j) {
nums[j] = nums[i];
j--;
}
}
nums[i] = x;
return i;
}
public static void quickSort(int[] nums, int low, int high) {
int k = 1;
if (low < high) {
int index = position(nums, low, high);
quickSort(nums, low, index - 1);
quickSort(nums, index + 1, high);
}
}
public static void quickSort(int[] nums){
int low=0;
int high=nums.length-1;
quickSort(nums,low,high);
}
}
运行结果