Java冒泡,快速,插入,选择排序^_^+二分算法查找
这段时间在学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冒泡,快速,插入,选择排序^_^+二分算法查找的更多相关文章
- 排序系列 之 简单选择排序及其改进算法 —— Java实现
简单选择排序算法: 基本思想: 在待排序数据中,选出最小的一个数与第一个位置的数交换:然后在剩下的数中选出最小的数与第二个数交换:依次类推,直至循环到只剩下两个数进行比较为止. 实例: 0.初始状态 ...
- Java版冒泡排序和选择排序
一.理解说明 1.理解和记忆 冒泡排序:依次定位数组元素,每次只和相邻的且符合条件的元素交换位置. 选择排序:依次在数组的每个位置,通过逐个对比选择出最大或最小的元素. 2.知识点说明 (1)数组是引 ...
- Java基础(46):选择排序的Java封装(完整可运行)
1 package lsg.ap.select; import java.util.Random; public class SelectSort { //选择排序 /** *@author: 梁山广 ...
- java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试
1.冒泡排序是排序里面最简单的了,但性能也最差,数量小的时候还可以,数量一多,是非常慢的. 它的时间复杂度是O(n*n),空间复杂度是O(1) 代码如下,很好理解. public void bubbl ...
- java:冒泡排序、选择排序、插入排序实现
整数排序 给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法. 样例 样例 1: 输入: [3, 2, 1, 4, 5] 输出: [1, 2, 3, 4, 5] ...
- Java实现冒泡排序,选择排序,插入排序
冒泡排序: 思想: 冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说排序完成 特点:比较稳定,排序数较小是 ...
- Java冒泡排序与直接选择排序代码随笔
冒泡排序:延申的有很多种,有的是先确定最大值放到后面,有的是先确定最小值放到前边,还有就是反过来,先确定最小值的位置,但是本质都是:不断两两比较,交换位置...第一趟确定一个最大(最小)值放到前边(后 ...
- java 冒泡排序法、选择排序
1.冒泡排序 /* * 冒泡排序 * 外层控制循环多少趟,内层控制每一趟的循环次数 */ public class Test08 { public static void main(String[] ...
- 带精英策略的快速非支配排序遗传算法 NSGA-II 算法
NSGAII(带精英策略的非支配排序的遗传算法),是基于遗传算法的多目标优化算法,是基于pareto最优解讨论的多目标优化,下面介绍pareto(帕累托)最优解的相关概念. Paerot支配关系 Pa ...
随机推荐
- elasticsearch学习(1)简单查询与聚合
elastic 被用作全文搜索.结构化搜索.分析以及这三个功能的组合 一个ElasticSearch集群可以包含多个索引, 每个索引包含多个类型 一个类型存储着多个文档 每个文档又有多个属性 索引(名 ...
- Linux下源码安装Peach-2.3.8教程
在peach文件夹下运行 python peach.py ./samples/HelloWorld.xml 提示先安装4Suite-XML. 根据提示在dependences文件夹下安装,出现两次错误 ...
- 一个电商项目的Web服务化改造2:现有项目的5个问题
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步, 1.现有项目的问题 1.1代码风格不统一 不同的 ...
- 学习Spring框架等技术的方向、方法和动机
学习Spring框架最早学习Spring框架是在大二的时候,当时看了几本书,看了一些视频,主要是传智播客的.更多的,还是写代码,单独写Spring的,也有与Struts和Hibernate等框架整合的 ...
- android 数据存储之SQLite
使用嵌入式关系型SQLite数据库存储数据 除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据 ...
- 【codeforces 510A】Fox And Snake
[题目链接]:http://codeforces.com/contest/510/problem/A [题意] 让你画一条蛇.. [题解] 煞笔提 [Number Of WA] 0 [完整代码] #i ...
- [POJ2104] 区间第k大数 [区间第k大数,可持久化线段树模板题]
可持久化线段树模板题. #include <iostream> #include <algorithm> #include <cstdio> #include &l ...
- PHP中Session和Cookie 快速了解与使用
SessionPHP的$_SESSION可以存储当前用户数据信息,用户访问WEB网站的时候,PHP会给每个访问的用户创建一个session ID,该ID是唯一ID,保存在客户机上,而用户的会话数据是保 ...
- Linux轻松一下——cowsay命令,让动物说话
Linux动物说话命令 使用方法 安装命令:sudo apt-get install cowsay 使用命令:cowsay hello 查看可选动物 cowsay -l 使用其他动物 cowsay - ...
- N天学习一个linux命令之scp
用途 通过ssh通道,不同主机之间复制文件 用法 scp [options] [user@host:]file1 [user2@host2:]file2 常用参数 -1使用 ssh 1协议 -2使用s ...