排序,二分法
排序
排序:就是指让保存的元素按照一定的规则进行排序存储
比如 成绩 按降序排序,班级前三
因为是java初学阶段,所以本文只介绍冒泡排序和选择排序两种排序,如果有对更多排序感兴趣的同学可以去看这篇文章,详细介绍了十大排序
交换变量的值
冒泡排序
代码示例:
public static void main(String[] args) {
int[] arr={9,3,5,8,6,4,2,1};
bubbleSort(arr);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
public static void bubbleSort(int[] arr){
//至少需要比较length-1次,
//例如有8个数据,至少需要比较7次才能保证所有数据都比较完
for (int i = 0; i < arr.length-1; i++) {
//比较的数据下标要小于length-1;
//因为最后一个元素不需要和j+1比较了,否则会发生下标越界异常
//-i只是为了提高效率,因为之前已经比较过的数据已经排好序,可以不用再次比较
//不加-i不会出错,只是会进行一部分可以省略的比较,导致效率降低
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j]>arr[j+1]){
//数据交换
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
选择排序
代码示例:
public static void main(String[] args) {
int[] arr={9,3,5,8,6,4,2,1};
choose(arr);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
public static void choose(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
int min=i;//假设下标为i的值是最小的
//因为无需和本身比较,所以比较的数据从它之后的数据开始,直到最后一个数据
for (int j = i+1; j < arr.length; j++) {
if (arr[min]>arr[j]) {
min=j; //当发现有数据大于最开始值以后,将下标替换
}
}
//经过一轮比较以后,如果发现min不是最开始假设的值
//说明有比假设值更小的数据,此时进行数据替换,否则不替换
if(min != i){
int temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
}
}
查找元素
在一堆数据中,找到某一个数据