这段时间在学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. 到Oracle官网下载 Oracle11 G 数据可和客户端操作

    1.准备一个Oracle的官网账号 用户名:541509124@qq.com 密码:LR4ever.1314 2.在搜索框中输入Oracle 11 G 3.点击Database Downloadds ...

  2. 48.cartinality的基本用法

    主要知识点 cartinality的用法     es去重用的是cartinality metric算法,对每个bucket中的指定的field进行去重,然后获取去重后的count,类似于count( ...

  3. Python之路【第一篇】:Python基础1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  4. Linux中安装MongoDB出现的问题记录

    mongoDB安装完成后,运行sudo service mongod start 查看程序状态:ps ajx | grep mongod   ,启动失败 查看失败信息提示,终端命令:tail -f / ...

  5. ggplot画基本图形类型

    df<-data.frame( x=c(3,1,5), y=c(2,4,6), label=c("a","b","c"))p<- ...

  6. C++ premier 中文版 学习笔记(第五章 表达式)

    解应用和自增组合使用的理解 由于后自增操作的优先级高于解引用操作,因此 *iter++ 等效于*(iter++).子表达式 iter++ 使 iter 加 1,然后返回 iter 原值的副本作为该表达 ...

  7. HDU 5502

    枚举所有的最大值盒子里糖果为K的情况,对于位置p,dp[p]为p以前的,第p个操作为抽到不是蓝球里的情况,盒子里最多糖果为k的情况的概率.而到p这个位置,可以有连续最多k-1(因为第k个操作必须为抽到 ...

  8. A*(也叫A star, A星)寻路算法Java版

    寻路算法有非常多种,A*寻路算法被公觉得最好的寻路算法. 首先要理解什么是A*寻路算法,能够參考这三篇文章: http://www.gamedev.net/page/resources/_/techn ...

  9. 01背包--小P寻宝记——粗心的基友

    题目描写叙述 这对好基友他们在经历无数的艰难险阻后.最终找到了宝藏.无奈的是这一对好基友居然是一样的粗心,又忘记了带一个大一点的包包,可惜啊..选择又出现了啊.. 已知包的体积是v,每种宝贝仅仅有一种 ...

  10. 前缀和&&离散化

    现在正在上课,但我还是要同步更新博文...\滑稽 先讲一个离散化,就是把几个离的特别远的数在不影响结果的情况下,变成相近的数.倒是没什么影响,但应用在数组下标的话可以节约空间.(貌似和hash有点像) ...