1.冒泡排序算法(最基础的排序算法,每循环比较一次,则将最大(小)的数排在数据的首位或末位)
//冒泡排序
public static void main(String[] args) {
int[] nums={9,8,7,6,5,4,3,2,1};
//让第i(num[0-nums.length-1])个数和后面的依次比较,如果后面的数比较小,则与i位置的数交换
//i控制比数的下标
for(int i=0;i<nums.length-1;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]>nums[j]){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]+" ");
}
}
2.直接选择排序:
基本思想:每次从待排数组中选择第n小的数据放到排序列表的第n个位置,假如有n个数据待排,那么经过n-1次排序后,待排数组已经是有序的了
实现步骤解读:
a.从a[0]-a[N-1] 中选出最小的数据,然后与a[0]交换位置
b.从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第一步结束后a[0]就是N个数中最小值)
c.从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第二步结束后a[1]就是N-1个数中最小值)
以此类推,N-1 次排序后,待排数据就已经按照从小到大的顺序排列了
示例代码:
public class SelectSort {
/**
* @param args
*/
public static void main(String[] args) {
int[] array={78,85,21,47,12,34,1,9};
selectSorter(array);
System.out.println("排序后数据:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
/**
* 直接选择排序
*/
public static void selectSorter(int[] array){
int indexMin=0;
int temp;
for(int i=0;i<array.length;i++){
//取出第i次比较的最小值
int mixValue=Integer.MAX_VALUE;
for(int j=i;j<array.length;j++){
if(array[j]<mixValue){
mixValue=array[j];
indexMin=j;
}
}
//与数组i位置上的值进行交换
temp=array[i];
array[i]=array[indexMin];
array[indexMin]=temp;
}
}
}
3..二分法查找
1>二分查找又称为折半查找,优点是比较次数少,查找的速度快,平均性能好;缺点是要求待查表为有序表,且插入删除困难,适用于不经常变动而查找频繁的有序列表
2>查找过程:首先假设表中元素是按升序排列的,将表中间位置记录的关键字与查找关键字比较,如果两者相等则查找成功;否则利用中间位置记录将表分成前后两个子表,如果中间记录位置的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程直到找到满足条件的记录。代码如下:
public static void main(String[] args) {
int[] nums={0,1,2,3,4,5,6,7,8,9};
int start=0;//起始位置
int end=nums.length-1;//结束位置
int mid=0;//中间位置
int find=0;//待查找的数
System.err.println("请输入要查找的数:");
Scanner scanner=new Scanner(System.in);//输入数据
find=scanner.nextInt();
do{
mid=(start+end)/2;//初始化中间位置
if(find==nums[mid]){
System.out.println("查找成功!"+find+" 在数组中所在位置是:"+mid);
break;
}else if(find>nums[mid]){
start=mid+1; //所要查找的数据比中间位置的数据大,则在后半部分查找,起始位置改为中间位置+1
}else if(find<nums[mid]){
end=mid-1; //所要查找的数据比中间位置的数据小,则在前半部分查找,结束位置改为中间位置-1
}
}while(start<=end);
if(start>end){
System.out.println("数组中不包含你所要查找的数据:"+find);
}