博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几种常用排序
阅读量:7005 次
发布时间:2019-06-27

本文共 3574 字,大约阅读时间需要 11 分钟。

选择排序:把第一个元素和其他元素依次对比,第一次比较完后 ,和最小的交换位置,即第一次最小的值出现在前面。然后第二个数和后面的进行比较 以此类推。(具体可参考https://www.cnblogs.com/nullering/p/9537321.html)

//简单选择排序,按自然顺序public static void selectsort(int[] array){int min, index, temp;//定义最小值索引 。for(int i = 0; i < array.length - 1; i++){ // N - 1 趟min = i;//查找选择最小元素值的下标索引值for(index = i + 1; index < array.length; index++){if(array[min] > array[index])min = index;}//交换位置if(min != i){temp = array[min];array[min] = array[i];array[i] = temp;}}}

冒泡排序:相邻元素两两比较,大的往后放,第一次比较完后,最大值出现在末尾即最大索引处。时间复杂度O(n²)

1 public static int maopao(int[ ] arr){ 2  3 for(int i=0;i
a[j+1]){ 8 9 int temp=arr[j];10 11 arr[j]=arr[j+1];12 13 arr[j+1]=temp;}14 15 } 16 17 return temp;18 19 }20 }

插入排序:第一个数据不动,从第二个开始和它前面的进行比较,比它大的向后排,比它小则不动。

1,

2,

3,

1 import java.util.Arrays; 2  3 //插入排序 4 //第一个数据不动,从第二个开始和它前面的进行比较,比它大的向后排,比它小则不动 5 public class Insert { 6     public static void sort(int[] arr) { 7          8         int insertData;// 要插入的数据  9         // 从数组的第二个元素开始循环将数组中的元素插入 10         for (int i = 1; i < arr.length; i++) { 11             insertData = arr[i]; 12             /*for(int j=i-1;j>=0;j--){13               if(a[i]
= 0) && insertData < arr[j]) { 22 arr[j + 1] = arr[j]; 23 j--; 24 } 25 // 直到要插入的元素不小于第j个元素,将insertNote插入到数组中 26 arr[j + 1] = insertData; 27 //System.out.println(Arrays.toString(arr));28 } 29 System.out.println(Arrays.toString(arr));30 }31 32 public static void main(String[] args) {33 int arr[]={2,6,5,4,7,8};34 //int arr[]=null;35 //int arr[]={2,1};36 //int arr[]={2};//[2]37 sort(arr);38 39 }40 41 }

归并排序:

1 package zh.ysj; 2  3 class guibingpaixu { 4  5     public static int[] sort(int[] a,int low,int high){ 6         int mid = (low+high)/2; 7         if(low

快速排序

import java.util.Arrays;

/*
* 快速排序:
* 一趟快速排序的算法是:   
* 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;   
* 2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];   
* 3)从j开始向前搜索,即由后开始向前搜索(j=j-1即j--),
* 找到第一个小于key的值A[j],A[i]与A[j]交换;   
* 4)从i开始向后搜索,即由前开始向后搜索(i=i+1即i++),
* 找到第一个大于key的A[i],A[i]与A[j]交换;   
* 5)重复第3、4、5步,直到 I=J;
* (3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。
* 找到并交换的时候i, j指针位置不变。
* 另外当i=j这过程一定正好是i+或j-完成的最后令循环结束。)
*/

1 public class speedSort { 2 public static void sort(int[] data) { 3 quickSort(data, 0, data.length - 1); 4 } 5  6 private static void quickSort(int[] data, int i, int j) { 7 int pivotIndex = (i + j) / 2; 8 // swap 9 swap(data, pivotIndex, j);//交换位置10 11 int k = partition(data, i - 1, j, data[j]);12 swap(data, k, j);//交换位置13 if ((k - i) > 1)14 quickSort(data, i, k - 1);//交换位置15 if ((j - k) > 1)16 quickSort(data, k + 1, j);//交换位置17 18 }19 20 /**21 * @param data22 * @param i23 * @param j24 * @return25 */26 private static int partition(int[] data, int l, int r, int pivot) {27 do {28 while (data[++l] < pivot)29 ;30 while ((r != 0) && data[--r] > pivot)31 ;32 swap(data, l, r);//交换位置33 } while (l < r);34 swap(data, l, r);//交换位置35 return l;36 }37 public static void main(String[] args) {38 int[] arr = { 2, 5, 3, 1, 4 };39 System.out.println("排序前:" + Arrays.toString(arr));40 // InsertSort.sort(arr);41 // BubbleSort.sort(arr);42 // SelectionSort.sort(arr);43 // ShellSort.sort(arr);44 sort(arr);45 // MergeSort.sort(arr);46 // HeapSort.sort(arr);47 System.out.println("排序后:" + Arrays.toString(arr));48 }49 50 /*51 * 交换数组中的两个元素52 */53 public static void swap(int[] data, int i, int j) {54 int temp = data[i];55 data[i] = data[j];56 data[j] = temp;57 }58 59 60 }

转载于:https://www.cnblogs.com/ysg520/p/9369024.html

你可能感兴趣的文章