易错、易望、基础、重要知识点——java中最常用的两种排序方式
来源:互联网 发布:手机淘宝年龄怎么看 编辑:程序博客网 时间:2024/06/03 09:35
冒泡排序(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;
}
}
- 易错、易望、基础、重要知识点——java中最常用的两种排序方式
- 易错、易望、基础、重要知识点 ——java语言的基本常识
- java中常用的两种排序
- 易错、易望、基础、重要知识点 ——API常用类1——StringBuffer/StringBuilder
- 黑马程序员——java基础——Java中创建线程的两种方式
- java多线程—常用的两种实现多线程方式
- Java中重要知识点
- [Java]HashMap的两种排序方式
- [Java]HashMap的两种排序方式
- [Java]HashMap的两种排序方式
- 【Java】HashMap的两种排序方式
- Java快速排序的两种方式
- java基础重要知识点总结
- java基础重要知识点问答
- java基础重要知识点答案
- Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式
- Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式(r)
- Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式
- C++智能指针使用总结
- 程序员浪费生命的几种方式
- UVALive 6924Load Balancing(dp)
- PAT1012
- 易错、易望、基础、重要知识点 ——java语言的基本常识
- 易错、易望、基础、重要知识点——java中最常用的两种排序方式
- libz.so.1: cannot open shared object file
- 易错、易望、基础、重要知识点 ——API常用类1——StringBuffer/StringBuilder
- Android-ViewPager自动滑动
- Scala基础教程--3控制结构与函数
- Hessian Matrix
- UVALive 6921Refraction(二分)
- 利用treegrid的loadFilter显示列的子属性
- Robust Quasistatic Finite Elements and Flesh Simulation