【JAVA基础】②关于冒泡排序和快速排序

来源:互联网 发布:c语言中long是干嘛的 编辑:程序博客网 时间:2024/06/07 02:53

老师一直在强调这两个排序方法是面试的时候经常会被各大HR要求手写,想了想还是整理在这儿吧

主要是思想,写在这儿的都是一些我的个人见解(以从小到大排序为例)

1、冒泡排序,就是将相邻的两个数字比较,较小的往前放

public void sort(int a[]){   for(int i=0;i<a.length;i++){       for(int j=i+1;j<a.length;j++){           if(a[i]>=a[j]){               int temp=a[i];               a[i]=a[j];               a[j]=temp;           }       }   }}
其实,交换位置还有一种“文艺”的写法:

a[i]=a[i]^a[j];a[j]=a[j]^a[i];a[i]=a[i]^a[j];
但是实际上,按位相与操作,耗费的时间会比第一种定义一个新变量要多。

2、快速排序,快速排序的思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归(简单来说就是方法自己调用自身)进行,以此达到整个数据变成有序序列。

实现思路大体就是:

public void quickSort(int a[],int l,int r){   if(l<r){       int i=l,j=r,x=a[i];       while(i<j){           while(i<j&&a[j]>x){              j--;           }           a[i]=a[j];           while(i<j&&a[i]<x){              i++;           }           a[j]=a[i];       }       a[i]=x;       quickSort(a,l,i-1);       quickSort(a,i+1,r);   }}

本来想画图的,不过这个机房电脑木有PS,画图着实困难,算了,看代码应该没有什么难度,这个代码已经是我精简之后的了。

0 0
原创粉丝点击