java 快速排序 插入排序 选择排序

来源:互联网 发布:淘宝注册账号打电话 编辑:程序博客网 时间:2024/06/02 04:25
package 未做_快速排序_归并排序_二分查找_等排序;/* * 快速排序 * 使用递归方法 * 把数组拆分为两个子数组加上一个基准元素:  * 1.选取最后一个元素作为基准元素,index变量记录最近一个小于基准元素的元素所在的位置, * 初始化为start- 1,发现新的小于基准元素的元素,index加1。 * 从第一个元素到倒数第二个元素,依次与基准元素比较, * 小于基准元素,index加1,交换位置index和当前位置的元素。 * 循环结束之后index+1得到基准元素应该在的位置,交换index+1和最后一个元素。 * 2.分别排序[start, index], 和[index+2, end]两个子数组 *  */public class QuickSort {public static void main(String args[]){int[] arr = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3 };  quictSort(arr);print(arr);}public static void print(int[] arr){for(int i=0;i<arr.length;i++){System.out.print(arr[i]);System.out.print(",");}}public static void jiaohuan(int[] arr, int index1, int index2){int temp = arr[index1];arr[index1] = arr[index2];arr[index2] = temp;}public static void quictSort(int[] arr){quictSort(arr, 0 , arr.length-1);}public static void quictSort(int[] arr, int start, int end){if(arr == null || end<2){return ;//若只有1个元素或没有元素,没必要排序,停止程序}int part = partition(arr, start , end);//求基准元素应该所在的位置if(part == start){quictSort(arr, part+1, end);//递归处理 part之后的数组元素}else if(part == end){quictSort(arr, start, part-1);//递归处理 part之前的数组元素}else{quictSort(arr, start, part-1);//递归处理 part之前的数组元素quictSort(arr, part+1, end);//递归处理 part之后的数组元素}}public static int partition(int[] arr, int start, int end){int value = arr[end];//选取最后一个元素为基准元素int index = start-1;//为了从start---end-1 进行比较 每次index+1;for(int i=start; i<end; i++){if(arr[i]<value){//若元素小于最后一个元素的值 则index +1 继续向前走index++;if(index != i){//交换当前index 与i位置的值jiaohuan(arr, index, i);}}}if((index+1) != end ){jiaohuan(arr, index+1, end);}return index+1;//得到基准元素所在的位置}}

package 未做_快速排序_归并排序_二分查找_等排序;/* 插入排序 * 升序 * 1.选取第一个元素为基准元素 * 2.若第二个元素小于基准元素,则把第二个元素插入到第一个元素的前面,把第二个元素作为基准元素 * 3.直到所有元素插入为止 */public class insertSort {public static void main(String args[]){int[] arr = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3 };Sort(arr);print(arr);}public static void Sort(int[] arr){if(arr == null || arr.length<2){return ;}for(int i=1;i<arr.length;i++){//从第i个元素开始与i之前的元素进行比较 若当前元素小于i之前的元素 则进行交换值,直到交换到第0个元素为止int value = arr[i];int position = i;//记录当前元素的位置for(int j=i-1;j>=0;j--){if(arr[j]>value){arr[j+1]=arr[j];//若当前值前面的值大于当前值,则把前面的值赋给后面的值position-=1;//记录value应该在的位置}else{break;}}arr[position] = value;//把当前值放在当前位置上}}public static void print(int[] arr){for(int i=0;i<arr.length;i++){System.out.print(arr[i]);System.out.print(",");}}}

package 未做_快速排序_归并排序_二分查找_等排序;//选择排序public class SelectSort {public static void main(String args[]){int[] arr = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3 };Sort(arr);print(arr);}public static void Sort(int[] a) {          if (a == null || a.length <= 0) {              return;          }          for (int i = 0; i < a.length; i++) {              int min = i; /* 将当前下标定义为最小值下标 */                for (int j = i + 1; j < a.length; j++) {                  if (a[min] > a[j]) { /* 如果有小于当前最小值的关键字 */                      min = j; /* 将此关键字的下标赋值给min */                  }              }              if (i != min) {/* 若min不等于i,说明找到最小值,交换 */                  int tmp = a[min];                  a[min] = a[i];                  a[i] = tmp;              }          }      }  public static void print(int[] arr){for(int i=0;i<arr.length;i++){System.out.print(arr[i]);System.out.print(",");}}}

0 0
原创粉丝点击