交换排序:冒泡排序和快速排序的java代码写法

今天复习数据结构,总结了一下考试or面试中如何让用java写最经常遇到的两种排序算法:冒泡排序和快速排序。
冒泡排序算法的原理如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

例子我就不举了,大家都上过学,应该都记得书上的例子吧…

直接来写代码:

import java.util.Scanner;
public class Sort {
public static void sort() {
Scanner input = new Scanner(System.in);
int sort[] = new int[10];
int temp;
System.out.println(“请输入10个排序的数据:”);
for (int i = 0; i < sort.length; i++) {
sort[i] = input.nextInt();
}
for (int i = 0; i < sort.length - 1; i++) {
for (int j = 0; j < sort.length - i - 1; j++) {
if (sort[j] < sort[j + 1]) {
temp = sort[j];
sort[j] = sort[j + 1];
sort[j + 1] = temp;
}
}
}
System.out.println(“排列后的顺序为:”);
for(int i=0;i<sort.length;i++){
System.out.print(sort[i]+" ");
}
}
public static void main(String[] args) {
sort();
}
}

然后来说快速排序,快排序是对冒泡排序的一种改进
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

上代码:

import java.util.Arrays;
public class TestQuickSort {
public static void main(String[] args) {
//给出无序数组
int arr[] ={72,6,57,88,60,42,83,73,48,85};
//输出无序数组
System.out.println(Arrays.toString(arr));
//快速排序
quickSort(arr);
partition(arr,0,arr.length-1);
//输出有序数组
System.out.println(Arrays.toString(arr));
}
private static int partition(int[] arr,int low,int high){
//指定左指针i和右指针j
int i=low;
int j=high;
//将第一个数作为基准值。挖坑
int x=arr[low];
//使用循环实现分区操作
while (i<j){//5 8
//1.从右向左移动j,找到第一个小于基准值的值 arr[j]
while (arr[j]>=x && i<j){
j–;
}
//2.将右侧找到小于基准数的值加入到左边的(坑)位置,左指针向中间移动一个位置i++
if (i<j){
arr[i]=arr[j];
i++;
}
//3.从左向右移动i,找到第一个大于等于基准值的值 arr[i]
while (arr[i]<x && i<j){
i++;
}
//4.将左侧找到的打印等于基准值的值加入到右边的坑中,右指针向中间移动一个位置 j–
if (i<j){
arr[j]=arr[i];
j–;
}
}
//使用基准值填坑,这就是基准值的最终位置
arr[i]=x; //arr[j]=y;
//返回基准值的位置索引
return i; //return j;
}
private static void quickSort(int[] arr,int low,int high){//???递归何时结束
if (low<high){
//分区操作,将一个数组分成两个分区,返回分区界限索引
int index=partition(arr,low,high);
//对左分区进行快排
quickSort(arr, low, index-1);
//对右分区进行快排
quickSort(arr, index+1, high);
}
}
public static void quickSort(int[] arr){
int low=0;
int high=arr.length-1;
quickSort(arr,low,high);
}
}
从时间复杂度上看,快排序是所有排序算法里实际性能最好的,但是数据有序的话那就不行了,这是最坏的情况,它比较适合数据量不大的情况。

发布了15 篇原创文章 · 获赞 20 · 访问量 536

猜你喜欢

转载自blog.csdn.net/zhaoyi666/article/details/104884636