4种算法的记录
- 选择排序法:它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
- 插入排序算法:是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于一个新的数据,进行从后往前的比较,然后插入数据。可以观看此视频了解 传送门
- 二分查找法:,作用就是搜索一个数,如果存在,返回其索引,否则返回 -1。
package 测试test;
import java.util.Arrays;
//冒泡,选择,插入,二分
public class Test4_7 {
public static void main(String[] args) {
// int N = 10;
// int[] arr = new int[N];
// randomArr(arr);
// InsertSort(arr);
// printArr(arr);
//
// Arrays.sort(arr);
// printArr(arr);
int[] arr = {1,2,4,5,8,9,7,6,4};
printArr(arr);
int s = Binary(arr, 5);
System.out.println(s);
}
//冒泡排序
public static void BubbleSort(int[] arr) {
int tianhuaban = arr.length-1;
for (int i = 0; i <=tianhuaban ; i++) {
for (int j = 0; j <= tianhuaban-1; j++) {
if (arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
//选择排序
public static void SelectSort(int[] arr) {
//int indexOfMax = 0;这个是错误的。
for (int qiang = arr.length-1; qiang >= 0; qiang--) {
int indexOfMax = 0;//重新初始化
for (int i = 0; i <= qiang; i++) {
if (arr[i] > arr[indexOfMax]) {
indexOfMax = i;
}
}
int temp = arr[qiang];
arr[qiang] = arr[indexOfMax];
arr[indexOfMax] = temp;
}
}
//插入排序
public static void InsertSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
//总共是i张手牌,手上已经排好顺序的是0~i-1
//拿的最后一张是i
int newCard = arr[i];//数组移动位置,但是通过newCard存放 最后一个数组元素值
int lastCard = i-1;
while (lastCard>-1 && newCard<arr[lastCard]) {
arr[lastCard+1] = arr[lastCard];
lastCard --;
}
arr[lastCard+1] = newCard;
}
}
//二分查找法
public static int Binary(int[] arr,int target) {
int begin = 0;
int end = arr.length-1;
while (begin <= end) {//注意点,小于等于
int midOfIndex = begin+((end-begin)>>1);//括号
if (target<arr[midOfIndex]) {
end = midOfIndex-1;
}else if (target>arr[midOfIndex]) {
begin = midOfIndex+1;
}else {
return midOfIndex;
}
}
return -1;
}
//输出数组
public static void printArr(int[] arr) {
for (int i : arr) {
System.out.print(i+" ");
}
System.out.println("");
}
//随机数组
public static void randomArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*100);
}
}
}