一 、快速排序:
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
* 快速排序之左右指针
* 选择最左端的为基准值(pivot)
* 从右向左遍历,移动hi指针,找到第一个比基准值小的值。
* 从左向右遍历,移动low指针,找到第一个比基准值大的值。
* 交换此时low和hi指针位置的数值。循环进行,直到low=hi
* low等于hi时,把基准值位置与low位置的数值互换。
* 相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区
public static void kuaiSuPaiXu(int[] arr,int start,int end){
if(start>=end)
return;
int left=start;
int right=end; //4321 //4325 //1234 //2413
int value=arr[start];
while (left<right){
//如果用数组第一个数作为基准数,那么就先从后往前查找。
//因为在查找的过程,最后个将被查找的数不会与基准数做比较,所以从后面开始查找,第一个就是基准数它必须要做比较。只需要把他放在临间点。
while (left<right){
//从后面开始查找比基数小的值
if(arr[right]<value){
break;
}
--right;
}
while (left<right){
//从前面开始查找比基数大的值
if(arr[left]>value){
break;
}
++left;
}
if(left<right){
int temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
}
print(arr);
}
if(left == right){
arr[start]=arr[left];
arr[left]=value;
}
kuaiSuPaiXu(arr,start,left-1);
kuaiSuPaiXu(arr,left+1,end);
}
二、冒泡排序:
冒泡排序算法的原理如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public static void sort_maopao(int[] arr){
for(int k=0;k<arr.length-1;k++){
for (int m=k+1;m<arr.length;m++){
if(arr[m]<arr[k]){
int temp=arr[m];
arr[m]=arr[k];
arr[k]=temp;
}
}
print(arr);
}
}