学习笔记:数组四大排序方法

来源:互联网 发布:java 进阶书籍 编辑:程序博客网 时间:2024/05/18 03:42

一、顺序查找法(个人最常用)

import java.util.Scanner;public class main {public static void main(String[] args){Scanner kb=new Scanner(System.in);double[] a = new double[10];int mfind = 50 ;boolean bFind = false ;for (int i=0;i<a.length;i++){a[i] = kb.nextDouble();}for (double x:a){System.out.print(x+" ");}System.out.println();for (double x:a){if (mfind == x){bFind = true ;break;}}if (bFind){System.out.println("找到");}else{System.out.println("没找到");}}}

【程序说明】
对于元素没有排序的数据,常利用顺序查找方法,即逐个将数组元素与待查找元素比较,如果匹配,则查找到指定元素,如果遍历整个数组仍未查到,则表明数组中没有待查找的元
素。

二、冒泡排序法

public class main {public static void main(String[] args) {int[] a = new int[10];boolean bFind = false ;Random r = new Random();for (int i = 0 ;i<=a.length-1;i++){a[i]= r.nextInt(90)+10;System.out.print(a[i]+ " ");}System.out.println();for(int j=1;j<a.length;j++){for(int i=0;i<a.length-j;i++){if (a[i] > a[i+1]){//两两交换int temp=a[i];a[i]=a[i+1];a[i+1]=temp;}}}System.out.println("排序后的数据为: ");for (int x:a)System.out.print(x+" ");}}

【程序说明】
从数组的第一个元素开始,数组前后两个元素两两比较,如果两个元素顺序不满足要求,
相互交换位置。这样,经过第一轮比较,则数组中最大的元素到达数组末尾,经过第二轮比
较,数组中次大的元素到达数组倒数第二的位置。重复以上步骤,则数组中所有元素即完成
了从小到大的排序。由于该排序类似于气泡小的上升,大的沉底,故名冒泡法。

三、二分查找法
“`
public class main {
public static void main(String[] args) {
int a[]={9,13,25,34,38,62,69,78,86,97};//静态初始化
int iZSearchnum=86; //index 为查找标志位,初始值置为-1
//left,mid,right 分别为数组或子段的最左、中间、最右元素的下标
int index=-1,left,mid,right;
left=0;
right=a.length-1;
while(left<=right){
mid=(left+right)/2;
if(a[mid]== searchnum){
index=mid; //如果中间元素和待查找元素相同,则找到
break;
}else if(a[mid]< searchnum){
left=mid+1; //查找后半段
}else{
right=mid-1; //查找前半段
}
}
if(index==-1)
System.out.println(searchnum +”在数组中不存在!”);
else
System.out.println(searchnum +”在数组中位置是” + index);
}
}

【程序说明】对于元素已排序的数组,常利用二分法查找。假设数组元素已按升序排列,二分查找法的核心思想是:首先,将数组中间位置元素与待查找数据比较,如果两者相等,则查找成功;否则利用中间位置元素将数组分成前、后两个子段,如果中间位置元素大于查找数据,则进一步查找前半段,否则进一步查找后半段。重复以上过程,直到找到和查找数据匹配的元素,则查找成功,或直到子段不存在为止,则查找不成功。 ***四、选择排序法*** ```public class main {public static void main(String[] args) {int[] a = new int[10];int minIndex ;Random r = new Random();for (int i = 0 ;i<=a.length-1;i++){a[i]= r.nextInt(90)+10;System.out.print(a[i]+ " ");}System.out.println();for (int i = 0; i < a.length-1; i++){ //第 i 趟循环minIndex = i; //假设第 i 个元素即是剩下数据的最小值for (int j = i + 1; j < a.length; j++)if (a[j] < a[minIndex]){minIndex = j; //记下该趟循环中最小数据的下标位置}if (minIndex != i){int tmp = a[i];a[i] = a[minIndex];a[minIndex] = tmp;}}System.out.println("排序后的数据为: ");for (int x:a){System.out.print(x+" ");     }    }}

【程序说明】
选择排序的思想是:每一趟从待排序的数据元素中选出最小的一个元素,将此元素与数据中第一个元素进行交换。然后,从剩下的待排序数据(第二个元素开始至结尾)中,选出最小的一个元素,将此元素与数据中第二个进行交换。依次类推,直到全部待排序的数据元
素排完。

注意: JAVA没法定义不定长的数组,要么声明为NULL,要么指定其长度,如果碰到这种情况可以用集合ArrayList来解决这个问题,或者,可以先遍历原数组,得到0的个数后,再定义新数组。

0 0
原创粉丝点击