文章内容
归并排序
冒泡排序
二分法查找
计数排序
快速排序
package java_sort;
import java.util.Arrays;
//归并排序:将多个数据集合为一个数据集:此处以有序数据集为例
public class MergeSort{
public static void main(String[] args) {
int[] arr1={1,2,3,5,6,8,10};
int[] arr2={2,3,4,7,9,10,20,21,23,24};
System.out.println(Arrays.toString(msort(arr1, arr2)));
}
//定义一个归并排序的方法
public static int[] msort(int[] arr1,int[] arr2){
//定义一个结果集:新数组
int[] resarr=new int[arr1.length+arr2.length];
//定义3个变量 分别记录3个数组的下标变化的
int m=0;//arr1下标
int n=0;//arr2下标
int index=0;//resarr下标的
//循环条件 只要两个数组中都有元素 就得比较
//arr1有元素 m<=arr1.length-1
//arr2有元素 n<=arr2.length-1 while|for
//循环条件1:两个数组中都有元素
while( m<=arr1.length-1 && n<=arr2.length-1){
//比较 小的进最终数组
if(arr1[m]<= arr2[n]){
//小的给最终的新的数组赋值
resarr[index++]=arr1[m++];
/*index++;
m++;*/
}else{//arr1[m]> arr2[n]
resarr[index++]=arr2[n++];
}
}
//循环条件2:数组1还有元素:则将剩余元素全部放入新数组
while(m<=arr1.length-1){
resarr[index++]=arr1[m++];
}
//循环条件3:可能arr2
while(n<=arr2.length-1){
resarr[index++]=arr2[n++];
}
return resarr;
}
}
//总结:归并排序:
/*前提:多个数据集必须提前排好序!!!
将多个数组合并到一个新建数组中,将小的值依次赋给新数组*/
package java_sort;
public class sort01 {
//java增强排序---冒泡排序-升序排序
public static void main(String[] args) {
int[] ary=new int[]{23,2,434,5,64,2,1};
/*规律:
//遍历数组进行排序:内外循环进行比较:
外循环控制对比轮数:内循环控制和谁比:数组i开始依次和之后的书进行比较*/
for(int i=0;i=ary[j+1]){//交换位置
int num=ary[j];
ary[j]=ary[j+1];
ary[j+1]=num;//交换完毕
}
}
}
//遍历排序完毕数组
for (int arry:ary){
System.out.println(arry);
}
}
}
package java_sort;
public class sort02 {
//二分查找法:利用二分查找在有序数组中查找某数字
/* 前提:该数组是升序排序的有序数组
原理:在数组中查找某个数字:输出其在数组中的位置下标:*/
public static void main(String[] args) {
int[] arry=new int[]{1,2,5,7,8,9};
int num=5;
sort02.findsort(arry, num);
}
private static void findsort(int [] arry,int num){
//利用二分查找在有序数组中查找某数字
int low = 0;
int high = arry.length - 1;
int middle=(low+high)/2;
//while循环查找:一直往数组中间靠
while (low <= high) {
//确定其在数组中的那一部分
if (num == arry[middle]) {//将查找数字和数组中间数进行 比较
break;
//判断上限是
} else if (num < arry[middle]) {//
high = middle - 1;
//判断下限
} else{
low = middle + 1;
}
}
//若没有,则返回-1
System.out.println(arry[middle]);
}
}
package java_sort;
public class sort02 {
//二分查找法:利用二分查找在有序数组中查找某数字
/* 前提:该数组是升序排序的有序数组
原理:在数组中查找某个数字:输出其在数组中的位置下标:*/
public static void main(String[] args) {
int[] arry=new int[]{1,2,5,7,8,9};
int num=5;
sort02.findsort(arry, num);
}
private static void findsort(int [] arry,int num){
//利用二分查找在有序数组中查找某数字
int low = 0;
int high = arry.length - 1;
int middle=(low+high)/2;
//while循环查找:一直往数组中间靠
while (low <= high) {
//确定其在数组中的那一部分
if (num == arry[middle]) {//将查找数字和数组中间数进行 比较
break;
//判断上限是
} else if (num < arry[middle]) {//
high = middle - 1;
//判断下限
} else{
low = middle + 1;
}
}
//若没有,则返回-1
System.out.println(arry[middle]);
}
}
package java_sort;
import java.util.Arrays;
public class sort04 {
public static void main(String[] args) {
int[] arr={23,12,34,10,40,3};
qsort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
//快速排序
//1.定义一个递归方法,执行寻找界点的方法
public static void qsort(int[] arr,int left,int right){
//2.递归出口为:
if(left>=right){
return;
}else{//递归执行规律
//获取第一个分界点:第一个分界点为;后序所有分界点由下面方法获得;
int index=getFinalIndex(arr, left, right);//得到方法中界点
//分界点左侧
qsort(arr, left, index-1);
//分界点右侧
qsort(arr, index+1, right);
}
}
//获取每一轮的最终的分界点 :利用递归分别让界点两侧执行以下方法
public static int getFinalIndex(int[] arr,int left,int right){
//1.获取边界 key=2
int key=arr[left];
//2 3 1 5 8
//0 1 2 3 4
while(left=key && left
mysql经典50道练习题