/**
*冒泡
* @author gx
* @time 2022/1/21 10:47
* 把每个元素依次和后面的每个元素进行比较
*/
public class BubbleSort {
public static void main(String[] args) {
int[] data = {2,3,4,523,23,433,21,213,43,432};
System.out.println("冒泡前:\n"+ java.util.Arrays.toString(data));
bubbleSort(data);
System.out.println("冒泡后:\n"+ java.util.Arrays.toString(data));
}
private static void bubbleSort(int[] data) {
int length = data.length;
for (int i = 1; i < length; i++) {
for (int j = 0; j < length - 1; j++) {
if (data[j]>data[j+1]){//相邻元素对比,元素换位置
int temp = data[j+1];
data[j+1] = data[j];
data[j] = temp;
}
}
}
}
}/**
* @author gx
* @time 2022/1/21 11:10
* 快排总结:1.找一个基准点temp
* 2.分别用i,j从数组左,右获取元素,与temp比较
* 3.当i>temp,j<temp的时候进行交换元素
* 4.遍历完后temp左边都是比他小的,右边都是大于的
* 5.再递归左右
*/
public class QuickSort {
public static void main(String[] args) {
int[] data = {23,43,234,3,24,32,432,87,8753,32};
System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
quickSort(data, 0, data.length - 1);
System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
}
private static void quickSort(int[] data, int low, int high) {
int i,j,temp,t;
if (low>high){
return;
}
i = low;
j = high;
temp = data[low];
while (i< j ){
while (temp<=data[j]&&i<j){
j--;
}
while (temp >=data[i]&&i<j){
i++;
}
if (i<j){
t=data[j];
data[j] =data[i];
data[i] =t;
}
}
data[low] = data[i];
data[i]=temp;
quickSort(data,low,j-1);
quickSort(data,j+1,high);
}
}package com.atguigu.jxc;
import java.util.ArrayList;
import java.util.List;
/**
* @author gx
* @time 2022/1/21 12:09
*/
public class BinarySearch {
public static void main(String[] args){
//注意:需要对已排序的数组进行二分查找
int[] data = {1, 8, 10, 89, 1000, 1000,1000, 1234};
List<Integer> list = binarySearch(data, 0, data.length, 1000);
System.out.println(list);
}
private static List<Integer> binarySearch(int[] data, int left, int right, int find) {
//先创建一个集合放找到的索引
ArrayList<Integer> list = new ArrayList<>();
if (left>right){//退出条件
return list;
}
int mid = (left+right)/2;
int midVal = data[mid];
if (find < midVal){//向左
return binarySearch(data,left,mid-1,find);
}else if (find > midVal){//向右
return binarySearch(data,mid+1,right,find);
}else {//相等,如果下标是5,那么可能有相同的,左右各来一位,4,6,每次都看一下
int temp= mid-1;
while (true){
if (temp <0 || data[temp] != find){
break;
}
if (data[temp] == find){
list.add(temp);
}
temp = temp-1;
}
list.add(mid);
temp = mid+1;
while (true){
if (temp>data.length-1 || data[temp] != find){
break;
}
if (data[temp] == find){
list.add(temp);
}
temp = temp+1;
}
return list;
}
}
}
版权声明:本文为m0_62151862原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。