内容:冒泡排序 选择排序 二分查找 快速排序 递归排序
冒泡排序:
/**
* 冒泡排序
* Created by yz on 2018/3/13.
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {24,69,80,57,13};
// Arrays.sort(arr);
// 规律1: 冒泡的次数是数组的长度-1
for (int i = 0; i < arr.length-1; i++) {
// 规律2:每一次冒泡中两两相比较的次数是数组的长度-第几次比较
for (int j = 0; j < arr.length-1-i; j++) {
// 相邻两个元素比较
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
选择排序:
/**
* 选择排序
* Created by yz on 2018/3/13.
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {24,69,80,57,13};
// 比较排序要进行数组长度-1次的比较排序
for (int i = 0; i < arr.length - 1; i++) {
// 每一次比较排序要进行数组长度-第几次比较排序
for (int j = i+1; j < arr.length; j++) {
// 相邻两个元素比较
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
二分查找 :
/**
* 二分查找,前提数组有序
* Created by yz on 2018/3/13.
*/
public class BinaryFind {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
// 定义一个要查找的变量
int find = 55;
System.out.println(getIndex(arr,find));
}
private static int getIndex(int[] arr, int find) {
// 在进行查找之前要确定三个位置
// min(最小位置) max(最大位置) mid(中间位置) 总是要根据中间位置(mid)的位置的值来确定是不是要查找的值
int min = 0;
int max = arr.length-1;
int mid = (min+max)/2;
// 如果要查找的值不等于中间这个位置的值的话就不停的查找
while (arr[mid] != find){
// 如果要查找的值比中间的位置的值要大,就从右边开始查找 确定要查找的范围
if(find>arr[mid]){
min = mid+1;
}
// 如果要查找的值比中间的位置的值要小,就从左边开始查找 确定要查找的范围
if(find<arr[mid]){
max = mid-1;
}
mid = (min+max)/2;
if(min > max ){
return -1;
}
}
// 如果等于的话就证明mid这个位置的值就是要查找的值,就直接返回
return mid;
}
}
快速排序和递归排序:
/**
* 常用算法
* Created by yz on 2018/03/05.
*/
public class Test {
/**
* 快速排序测试
* @param args
*/
public static void main(String[] args) {
int[] ints = {5,3,7,8,2,9,4,6};
sort(ints,0,ints.length-1);
for (int i = 0; i < ints.length; i++) {
System.out.print(ints[i]+" ");
}
}
/**
* 快速排序 第一步
* @param ints
* @param start
* @param end
* @return
*/
private static int sortUnit(int[] ints ,int start ,int end){
int num = ints[start]; //标杆
int i = start;
int j = end;
while (i<j){
while(i<j){
if(ints[j]<num){ // j负责找小的,扔个i
ints[i] = ints[j];
break;
}
j--;
}
while(i<j){
if(ints[i]>=num){ // i负责找大的,扔个j
ints[j] = ints[i];
break;
}
i++;
}
}
ints[i] = num;
return i;
}
/**
* 快速排序 第二步
* @param ints
* @param start
* @param end
*/
private static void sort(int[] ints ,int start ,int end){
if(start<end){
int index = sortUnit(ints,start,end);// 返回中间值,中间值左右两边继续排序
sort(ints,start,index-1); // 左边
sort(ints,index+1,end); // 右边
}
}
/**
* 递归排序
* @param file
*/
private static void findFile(File file){
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if(files[i].isFile()){ // 文件
System.out.println(files[i].getName());
}else{
findFile(files[i]);
}
}
}
}