一.冒泡排序
冒泡排序思想: 两两比较,大的往后放,第一次比较完毕最大值出现在最大索引处....
冒泡排序基本概念是:
依次比较相邻的两个数,将小数放在前面,大数放在后面。
即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。
然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,
直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,
将最大的数放到了最后。在第二趟:仍从第一对数开始比较
(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),
将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),
第二趟结束,在倒数第二的位置上得到一个新的最大数
(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
格式:
public class BubbleSort {
public static void sort(int[] data) {
for (int i = 0; i < data.length - 1; i++) {
for (int j = 0; j < data.length - 1 - i; j++) {
if (data[j] > data[j + 1]) {
SortTest.swap(data, j, j + 1);
}
}
}
}
}
三.选择排序
选择排序思想: 用0索引对应的元素依次后面索引对应的元素进行比较, 1索引..... 小的数据往前方法,就可以得到一个排好序的数组...
选择排序基本概念是:
把第一个元素依次和后面的所有元素进行比较。
第一次结束后,就会有最小值出现在最前面。
依次类推
格式:
public class SelectionSort {
public static void sort(int[] data) {
for (int x = 0; x < data.length - 1; x++) {
for (int y = x + 1; y < data.length; y++) {
if (data[y] < data[x]) {
SortTest.swap(data, x, y);
}
}
}
}
}
数组中的元素查找法(基本查找法)
折半查找(二分查找) :数组一定是有序
分析:
A:定义最小索引和最大索引
B:计算中间索引
C:中间索引对应的元素和需要查找的元素比较
相等,直接返回中间索引
不相等:
大了,左边找
max = mid -1 ;
小了,右边找
min = mid + 1 ;
E:重新计算中间索引 ,回到B继续查找
举例:需求:需要查找: int[] arr = { 24, 69, 80, 57, 13 }; 找80这个元素对应的索引
问题:虽然先排序,后进行折半查找;但是数组已经发生变化,80元素对应的索引已经不是之前的,有问题...
public class Demo {
public static void main(String[] args) {
//定义数组
int[] arr = { 24, 69, 80, 57, 13 };
printarr(arr);
//先排序
bobbleSort(arr);
printarr(arr);
//二分查找
int index = search(arr, 80) ;
System.out.println(index);
}
//二分查找
public static int search(int[] arr,int value) {
//定义索引
int min = 0;
int max = arr.length -1 ;
//计算中间索引
int mid = (min+max)/2 ;
while(arr[mid] !=value) {
if(arr[mid] > value) {
max = mid -1 ;
}else {
min = mid +1 ;
}
//找不到
if(min > max) {
return -1 ;
}
//重新计算中间索引
mid = (min+max)/2 ;
}
return mid ;
}
//冒泡排序
public static void bobbleSort(int[] arr) {
for(int x =0 ; x < arr.length-1; x ++) {
for(int y = 0 ; y <arr.length-1-x ; y++) {
if(arr[y] > arr[y+1]) {
int temp = arr[y] ;
arr[y] = arr[y+1] ;
arr[y+1] = temp ;
}
}
}
}
public static void printarr(int[] arr) {
System.out.print("[");
for(int i=0;i<=arr.length-1;i++) {
if(i==arr.length-1) {
System.out.println(arr[i]+"]");
}
else
System.out.print(arr[i]+",");
}
}
}