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(",");
}
}
}