选择排序:依次从待排序的数据元素中选择一个最小的值,放到已排序的序列的末尾
static void select(int[] arr){
int n = arr.length;
for(int i=0;i<n-1;i++){
int tmp = i;
for(int j=1+i; j<n-1;j++){
if (arr[j]<arr[tmp]){
tmp = j;
}
}
if (tmp!=i){
int value = arr[tmp];
arr [tmp] = arr[i];
arr [i] = value;
}
}
}
冒泡排序:依次比较相邻两个元素的大小、交换位置、重复n次
static void bubble(int[] arr){
int n = arr.length;
for (int i=0;i<n;i++){
for (int j=0;j<n-1-i;j++){
if (arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] =tmp;
}
}
}
}
插入排序:将一个记录插入到已经排好序的有序表中
static void insert(int[] arr){
int n = arr.length;
for (int i=1;i<n;i++){
if (arr[i] < arr[i-1]){
int tmp = arr[i];
for (int j=i; j>=0;j--){
if (j>0 && arr[j-1]>tmp){
arr[j]=arr[j-1];
}else {
arr[j] = tmp;
break;
}
}
}
}
}
归并排序:采用分治法、将有序的子序列合并,得到完全有序的序列
static void sort(int[] arr, int left, int right){
if (left<right){
int mid = (left+right)>>1;
sort(arr,left,mid);
sort(arr,mid+1,right);
merge(arr,left,mid,right);
}
}
static void merge(int[] arr, int left, int mid, int right){
int[] tmp = new int[arr.length];
int k = 0;
int n = 0;
int i = left;
int j = mid+1;
while (i <= mid && j <= right){
if (arr[i] < arr[j]){
tmp[k++] = arr[i++];
}else{
tmp[k++] = arr[j++];
}
}
while (i <= mid){
tmp[k++] = arr[i++];
}
while (j <= right){
tmp[k++] = arr[j++];
}
while (left <= right){
arr[left++] = tmp[n++];
}
}
快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
public static void quickSort(int [] arr,int left,int right) {
int pivot=0;
if(left<right) {
pivot=partition(arr,left,right);
quickSort(arr,left,pivot-1);
quickSort(arr,pivot+1,right);
}
}
private static int partition(int[] arr,int left,int right) {
int key=arr[left];
while(left<right) {
while(left<right && arr[right]>=key) {
right--;
}
arr[left]=arr[right];
while(left<right && arr[left]<=key) {
left++;
}
arr[right]=arr[left];
}
arr[left]=key;
return left;
}
main 测试方法
public static void main(String[] args) {
int [] arr = new Random().ints(10000,0,1000000).distinct().toArray();
System.out.println(Arrays.toString(arr));
quickSort(arr);
System.out.println("----------");
System.out.println(Arrays.toString(arr));
for (int i=0;i<arr.length-1-1;i++){
if (arr[i]>arr[i+1]){System.out.println(arr[i]);}
}
}