这段时间在学Java,期间学到了一些排序和查找方法。特此写来和大家交流,也方便自己的日后查看与复习。

1.下边是Java的主类:

public class Get
{
public static void main(String[] args)
{ int len=10;
int[] a=new int[len]; for(int i=0;i<len;i++)
{
int t=(int)(Math.random()*10);
a[i]=t;
} //静态初始化数组
//int[] b=new int[]{1,2};
// 动态初始化数组:由下面看出动态初始化就是只指定数组的长度,由系统为数组分配初始值。
int[] b=new int[10]; // int a[]={2,45,34,1,3,6,5,67,867,76};
// int a[]={4,2,45,34,1,3,6,5,67,867,76};
Insert is=new Insert();
is.sort(a);
// Bubble bub=new Bubble();
// bub.bubblesort(a);
Select sl=new Select();
sl.sort(a);
// Quick qc=new Quick();
// qc.sort(a, 0, a.length-1); for(int i=0;i<a.length;i++){
b[i]=a[i];
System.out.print(b[i]+" ");
} BinaryFind bf=new BinaryFind(); /*System.out.println("Hello World!");
Fun f=new Fun(23,"李四");
System.out.println("我的名字叫"+f.name);
System.out.println("我的年龄为"+f.age);*/
}
}

其中,以下代码将定义一个数组,并且将产生一组随机数,存放在数组a[]中:

int len=10;
int[] a=new int[len]; for(int i=0;i<len;i++)
{
int t=(int)(Math.random()*10);
a[i]=t;
}

数组的初始化方式有静态和动态俩种,不能够混合使用,如

int[] b=new int[2]{1,2};将会报一个经典的错误。

2.二分算法查找。

二分算法的主要思想是:递归。一次没找到,将会不停的调用该函数,直到不满足条件或者找到该函数为止。

代码如下:

//二分算法!!!
class BinaryFind
{
public void find(int left,int right,int a[],int val)
{
//找到中间的数midVal
int midIndex=(left+right)/2;
int midVal=a[midIndex]; if(left<=right)
{
//当左边小于右边时执行以下操作:
if(midVal>val)
{
//递归调用
find(left,midIndex-1,a,val);
}else if(midVal<val)
{
find(midIndex+1,right,a,val);
}else
{
System.out.println("已经找到该数,下标为:"+midIndex);
}
}else
{
System.out.println("找不到该数");
}
}
}

3.插入排序

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)

//插入排序!!!
class Insert
{
public void sort(int a[])
{
for(int i=1;i<a.length;i++)
{
int insertVal=a[i];
//将insertVal与前一个数比较
int index=i-1;
while(index>=0&&insertVal<a[index])
{
//将a[index]向后移动
a[index+1]=a[index];
//让index向前移动
index--;
}
//否则将insertVal插入到适当位置
a[index+1]=insertVal;
}
}
}

谨记如果此判断条件index>=0的等号忘记加,则,数组中的第一个元素将不会参与排序!!!

while(index>=0&&insertVal<a[index])

4.快速排序!!!

//* 快速排序。

//* 思想:选定一个元素作为枢纽元素,将小于该元素的元素放到左边,大于该元素的放到右边。不断重复此过程。

//* 直到最终形成一个有序的列表。

//* 下面的参数low,high就是可以支持一个数组的一个子区间进行排序。

//* 如果是整个数组进行排序,则low=0,high=数组.length-1。

//* @param data:要排序的数组。

//* @param low:排序的起始位置

//* @param high:排序的结束位置。

class Quick
{
public void sort(int a[], int low, int high){
int i=low;
int j=high;
int key=a[low]; if (low < high) {
// 枢纽元素
System.out.println("枢纽元素是:" + key + ",low:" + low + ",high:" + high); while(i<j)
{
while(i<j&&key<=a[j])
{
j--;
}
a[i]=a[j];
// int temp=a[j];这三行可以与前面一行互换,实现的功能相同。
// a[j]=a[i];
// a[i]=temp;</span>
while(i<j&&key>=a[i])
{
i++;
}
a[j]=a[i];
//下面标红三行与上面一行功能相同
//            int temp1=a[j];
 // a[j]=a[i];
// a[i]=temp1;</span> a[i]=key;
}
sort(a,low,i-1);
  sort(a,i+1,high);
  }
}
}  

快速排序值得注意的地方为,在主函数中调用方法要注意数组越界的问题。

即       Quick qc=new Quick();           qc.sort(a, 0, a.length-1);在传递实参的时候是a.length-1而不是a.length

5.选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

//选择排序!!!
class Select
{ int temp;
public void sort(int a[]){
for(int i=0;i<a.length-1;i++){ for(intj=i+1;j<a.length;j++){ 将俩个元素进行比较
 if(a[i]>a[j]){
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
}
}

6.冒泡排序

冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

//冒泡排序!!!
class Bubble
{
int temp;
public void bubblesort(int a[]){
for(int i=0;i<a.length-1;i++){ for(int j=0;j<a.length-1-i;j++){
//a.length-1-i是因为最后的i个元素已经有序。 if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
} }
}
}

7.二维数组

这是自己先前用来练手的二维数组的使用方法,一起来看看吧。

//将一个矩阵倒置输出!!!
class Array
{
//int num[][];
int num[][]={
{1,2,3},
{4,5,6},
{7,8,9}
};
public void get(){
System.out.println("原数组为:");
for(int i=0;i<=2;i++){
for(int j=0;j<=2;j++){
System.out.print(num[i][j]+"\t");
}
System.out.println("\n");
}
System.out.println("倒置后的数组为:");
for(int i=0;i<=2;i++){
for(int j=0;j<=2;j++){
System.out.print(num[j][i]+"\t");
}
System.out.println("\n");
} } }

8.99乘法表

先前学习的俩层循环,99乘法表  ^_^

//输出99乘法表!!!
class Table
{
public static void get(){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t"); }
System.out.print("\n");
}
}
}

Java冒泡,快速,插入,选择排序^_^+二分算法查找的更多相关文章

  1. 排序系列 之 简单选择排序及其改进算法 —— Java实现

    简单选择排序算法: 基本思想: 在待排序数据中,选出最小的一个数与第一个位置的数交换:然后在剩下的数中选出最小的数与第二个数交换:依次类推,直至循环到只剩下两个数进行比较为止. 实例: 0.初始状态 ...

  2. Java版冒泡排序和选择排序

    一.理解说明 1.理解和记忆 冒泡排序:依次定位数组元素,每次只和相邻的且符合条件的元素交换位置. 选择排序:依次在数组的每个位置,通过逐个对比选择出最大或最小的元素. 2.知识点说明 (1)数组是引 ...

  3. Java基础(46):选择排序的Java封装(完整可运行)

    1 package lsg.ap.select; import java.util.Random; public class SelectSort { //选择排序 /** *@author: 梁山广 ...

  4. java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试

    1.冒泡排序是排序里面最简单的了,但性能也最差,数量小的时候还可以,数量一多,是非常慢的. 它的时间复杂度是O(n*n),空间复杂度是O(1) 代码如下,很好理解. public void bubbl ...

  5. java:冒泡排序、选择排序、插入排序实现

    整数排序 给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法. 样例 样例 1: 输入: [3, 2, 1, 4, 5] 输出: [1, 2, 3, 4, 5] ...

  6. Java实现冒泡排序,选择排序,插入排序

    冒泡排序: 思想: 冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说排序完成 特点:比较稳定,排序数较小是 ...

  7. Java冒泡排序与直接选择排序代码随笔

    冒泡排序:延申的有很多种,有的是先确定最大值放到后面,有的是先确定最小值放到前边,还有就是反过来,先确定最小值的位置,但是本质都是:不断两两比较,交换位置...第一趟确定一个最大(最小)值放到前边(后 ...

  8. java 冒泡排序法、选择排序

    1.冒泡排序 /* * 冒泡排序 * 外层控制循环多少趟,内层控制每一趟的循环次数 */ public class Test08 { public static void main(String[] ...

  9. 带精英策略的快速非支配排序遗传算法 NSGA-II 算法

    NSGAII(带精英策略的非支配排序的遗传算法),是基于遗传算法的多目标优化算法,是基于pareto最优解讨论的多目标优化,下面介绍pareto(帕累托)最优解的相关概念. Paerot支配关系 Pa ...

随机推荐

  1. 【webpack结合React开发环境配置】React开发环境配置之Webpack结合Babel8.x版本安装的正确姿势(Webpack最新版4.x结合Babel8.x环境配置步骤)

    1. 安装cnpmnpm install -g cnpm --registry=https://registry.npm.taobao.org[使用淘宝镜像]2. 初始化package.json文件c ...

  2. Luogu P2298 Mzc和男家丁的游戏

    Mzc和男家丁的游戏 题目背景 mzc与djn的第二弹. 题目描述 mzc家很有钱(开玩笑),他家有n个男家丁(做过上一弹的都知道).他把她们召集在了一起,他们决定玩捉迷藏.现在mzc要来寻找他的男家 ...

  3. Yin and Yang Stones(思路题)

    Problem Description: A mysterious circular arrangement of black stones and white stones has appeared ...

  4. Dajngo——10 请求与响应 文件上传 GET和POST请求 类视图

    Dajngo——10 HttpRequest对象 HttpResponse对象及子类 form标签中的GET和POST GET提交方式 POST提交方式 request得GET和POST属性 文件上传 ...

  5. TLE - Time Limit Exceeded

    TLE - Time Limit Exceeded no tags  Given integers N (1 ≤ N ≤ 50) and M (1 ≤ M ≤ 15), compute the num ...

  6. [bzoj3669][Noi2014]魔法森林_LCT_并查集

    魔法森林 bzoj-3669 Noi-2014 题目大意:说不明白题意系列++……题目链接 注释:略. 想法:如果只有1个参量的话spfa.dij什么的都上来了. 两个参量的话我们考虑,想将所有的边按 ...

  7. mongodb之配置

    前言 最新版本支持yaml格式的配置文件,只支持空格,不能使用tab 详细配置说明 #系统日志配置 systemLog: destination: file path: /var/log/mongod ...

  8. 2014年辛星jquery解读第三节 Ajax

    ***************Ajax********************* 1.Ajax是Asynchronous Javascript And  XML的简写,它指的是异步Javascript ...

  9. elciple中怎样设置字体大小

    (1)假设想改变Java代码字体大小等 Window->perference->General->Appearance->Colors and Fonts->找到 须要更 ...

  10. Android 组件ContentProvider

    Android 组件ContentProvider Android的数据存储有五种方式Shared Preferences.网络存储.文件存储.外储存储.SQLite,一般这些存储都仅仅是在单独的一个 ...