参考:https://www.cnblogs.com/onepixel/articles/7674659.html
import java.util.Scanner;
//各种排序方法
public class SortM {
/**
* @param args
*/
public static void Swap(int arr[],int i,int j)
{
int temp = arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
public static void output(int arr[])
{
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]);
}
}
//冒泡排序
public static void bubbleSort(int arr[]){
for(int i=0;i<arr.length-1;i++)
{
for(int j=0;j<arr.length-i-1;j++)
{
if(arr[j]>arr[j+1])
{
Swap(arr,j,j+1);
}
}
}
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]);
}
}
//选择排序 :首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
public static void selectionSort(int arr[])
{
for(int i=0;i<arr.length-1;i++)
{
int min=i;
for(int j=i+1;j<arr.length;j++)
{
if(arr[j]<arr[min])
{
min = j;
}
}
Swap(arr,min,i);
}
output(arr);
}
//插入排序:取出一个元素,在已经排序的元素序列中从后向前扫描;
public static void insertionSort(int arr[])
{
int current,pre;
for(int i=1;i<arr.length;i++)
{
current = arr[i];
pre = i-1;
while(pre>=0&&arr[pre]>current)
{
arr[pre+1] = arr[pre];
pre--;
}
arr[pre+1] = current;
}
output(arr);
}
/*快速排序:
1)从数列中挑出一个元素,称为 “基准”(pivot);
2)重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
3)递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
quickSort(arr,0,n-1);
output(arr);
*/
public static void quickSort(int arr[],int left,int right)
{
if(left<right)
{
int index = port(arr,left,right);
quickSort(arr,left,index-1);
quickSort(arr,index+1,right);
}
}
public static int port(int arr[],int left,int right)
{
int pivot = left;
int index = pivot+1;
for(int i=index;i<=right;i++)
{
if(arr[i]<arr[pivot])
{
Swap(arr,i,index);
index++;
}
}
Swap(arr,index-1,pivot);
return index-1;
}
}