您的位置:首页 > 编程语言 > Java开发

java之最简单和最复杂的排序算法

2017-11-01 13:23 357 查看

冒泡排序:

当前元素和next元素对比大小

如果从小到大排序,大的往后排,如果从大到小小的往后排

直到交换到最后一位,则是整个数据中最大(最小的)

则继续开始下一轮比较

ok 看看代码

public class BubleSort {
public static int[] bubbleSort(int[] arr){
int size = arr.length;
for(int i=0;i<size-1;i++){
for(int j=0;j<size-1-i;j++){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
}
}
}
return arr;
}

public static void swap(int arr [],int num1,int num2){
int temp;
temp=arr[num1];
arr[num1]=arr[num2];
arr[num2]=temp;
}
@Test
public void sort(){
int arr[]={1,2,3,8,4,5};
System.out.println(bubbleSort(arr));
}
}


快速排序

找基准值

比大小

交换

继续查找

交换基准值到合适的位置

重复

快排,排序中据说是最快的(不然为啥叫做快排呢?),Arrays.sort()内部实现之一,快排是核心,同时也是分治法得一种

0.测试数据

int[]a={7,5,3,2,9,10,8,4,6,1};

1.找基准值

基准值的问题,大家就先不要纠结,众说云云,选择哪个那个是最快的,这里我就假设第一个为基准值

这里基准值就是a[0]=7;

2.比大小

这里呢,来两个指针i(数组开始index)和j(结束index)

对比基准值

如果是从小到大呢,则是期望对比结果左边则是比基准值大的,右边比基准值小

如果是从大到小则相反

为什么是左边要找基准值大的呢,因为要交换

知道了期望结果,就知道怎么做了

3.交换

指针i,j都开始进行靠拢,如果i指针指向的值比基准值小,而j指针执行的值比基准值大,则交换

4.继续查找

接着i,j继续靠拢,如果出现符合交换条件的就进行交换,同时也要符合i

5.交换基准值到合适的位置

知道i,j指针相遇,则交换基准值

6.重复

接着用分治法的思路,把左边和右边分开,继续进行以上过程(递归),最后得到的数组就是从小到大的顺序

show 代码

public void quickSort(int[]arr,int left,int right)
{
if(left>right)
return;
int pivot=arr[left];
int i=left;
int j=right;
while(i<j){
while(arr[i]<pivot&&i<j)
i++;
while(arr[j]>pivot&&i<j)
j--;
if(i<j){
swap(arr,i,j);
}
}
arr[left]=arr[i];
arr[i]=pivot;
quickSort(arr,left,i-1);
quickSort(arr,i+1,right);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: