冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
算法步骤:
1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3)针对所有的元素重复以上的步骤,除了最后一个。
4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。原理图如下,程序见最后
选择排序(Selection sort)也是一种简单直观的排序算法。
算法步骤:
1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
2)再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
3)重复第二步,直到所有元素均排序完毕。 原理图如下,程序
折半查找:查找数组中的某个特定元素,原理如下图,,使用该方法进行操作的数组必须为 排序好的数组.
public class ArrayToolss {
/**
* @author xiaobei56
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr={21,23,14,56,232,7651,23};
System.out.println("原数组:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
/*System.out.println("冒泡排序:");
bubble(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();*/
System.out.println("选择排序:");
select(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println(binarySearch(arr, 23));
}
//冒泡排序
public static void bubble(int[] arr){
int temp;
for (int i = 0; i < arr.length; i++) {//第一个for只是保证循环次数
for (int j = 0; j < arr.length-i-1; j++) {//第二个for 是为了比较 arr[j] 和 arr[j+1]的大小。
if(arr[j]>arr[j+1])
{
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
}
//选择排序
public static void select(int[] arr){
int temp;
for (int i = 0; i < arr.length-1; i++) {//
for (int j = i; j < arr.length; j++) {
if(arr[i]>arr[j]){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
//折半查找-------------法查找到的结果有一个特点,就是 当数组中//出现多个要查找的数字,会返回 离数组"中间"位置最近的 元素下标
public static int binarySearch(int[] arr,int key){
//要使用二分法,进行查找,数组必须是排好序的,,否则不可以使用
//即可以定义三个变量,来存储最小值,中间值,最大值
int min=0;
int mid=0;
int max=arr.length-1;
while(min<max){//当 min>=max的时候说明数组已经遍历完了,即可结束循环
mid=(min+max)/2;
if(arr[mid]==key){
return mid;
}else if(key<arr[mid])
{
max = mid + 1;
}
else if(key>arr[mid])
{
min = mid - 1;
}
}
return -1;
}
}