选择,冒泡,插入排序,折半查找,
/*
* 选择排序:
* 每一次比较完成时最小值出现在最小索引处
*
* */
public class XuanZedemo {
public static void main (String [] args){
//先定义好一个数组
int []arr = {5,6,8,4,3,0,9};
System.out.print("排序前:");
for(int i =0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
//选择排序
//先定义一个中间变量
int temp;
for(int i =0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
System.out.print("排序后:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
结果:
排序前:5 6 8 4 3 0 9
排序后:0 3 4 5 6 8 9
public class MaoPaodemo {
public static void main (String [] args){
//先定义一个数组
int [] arr = {5,6,8,4,2,9,12};
System.out.print("排序前:");
for(int i =0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.print("排序后:");
//定义一个中间变量
int temp;
for(int i = 0 ; i<arr.length-1;i++){
//第一层for循环是表示比较的趟数
for(int j=0;j<arr.length-1-i;j++){
//在这里要保证j+1最终不能下标越界,所以你要保证j+1<arr.length
//由于每一趟的比较下一次的比较就会少一次因此为了减少没必要的比较则每次下来减一次
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp; }
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
结果:
排序前:5 6 8 4 2 9 12
排序后:2 4 5 6 8 9 12
public class ChaRudemo {
public static void main(String[] args) {
int[] arr = { 4, 5, 6, 8, 1, 2 };
System.out.print("排序前:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
ChaRu(arr);
System.out.print("排序后:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
private static void ChaRu(int[] arr) {
// 我们假设首位已经排好序了
// 这样我们只需遍历1-arr.length-1个元素
int i, j;
int target;
for (i = 1; i < arr.length; i++) {
j = i;
target = arr[i];// target目的是为了保存之前的数据
while(j > 0 && target < arr[j - 1]) {
arr[j] = arr[j - 1];
j--;
}
arr[j] = target;//最终将target放入指定位置
}
}
}
结果:
排序前:4 5 6 8 1 2
排序后:1 2 4 5 6 8
/*
* 数组高级部分:查找
*
* 基本查找:数组元素查表法(查询数组中的元素第一次在数组中出现的索引):从头查到尾
*
* 数组二分查找(折半查找)
*
* 思路:
* 1)定义最大索引和最小索引
* 2)计算出中间索引:
* 如果要查的元素和中间索引对应的元素相等,返回中间索引
* 如果不想等
* 大了,左边找
* 小了右边找
* 3)重写计算出中间索引:
* 大了:max = mid -1 ;
* 小了:min = mid+1 ;
* 4)继续回到(2)进行重新计算在查找!
* */
import java.util.Scanner;
public class ZheBandemo {
public static void main(String[] args) {
// 折半查找,必须是有序的数组
Scanner in = new Scanner(System.in);
int[] arr = { 1, 2, 3, 4, 5, 6, 8, 9 };
System.out.println("请输入你要查询的数字:");
int num = in.nextInt();
int index = findNum(num, arr);
if (index == -1) {
System.out.println("你要的查询的数字不存在!!!");
}else{
System.out.println("你要的查询的数字" + num + "的下标是" + index);
}
}
private static int findNum(int num, int[] arr) {
int minIndex = 0;
int maxIndex = arr.length - 1;
int midIndex = (minIndex + maxIndex) / 2;
// 开始查找数
while (arr[midIndex] != num) {
//依据的条件是:中间索引的值是否是要查找的数
if (arr[midIndex] > num) {
maxIndex = midIndex - 1;
} else if (arr[midIndex] < num) {
minIndex = midIndex + 1;
}
if (minIndex > maxIndex) {
return -1;
}
midIndex = (minIndex + maxIndex) / 2;
}
return midIndex;
}
}
结果:
请输入你要查询的数字:
5
你要的查询的数字5的下标是4
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。