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 ...
随机推荐
- [CodeForces] CF226D The table
Harry Potter has a difficult homework. Given a rectangular table, consisting of n × m cells. Each ce ...
- CF36E Two Paths (欧拉回路+构造)
题面传送门 题目大意:给你一张可能有重边的不保证联通的无向图,现在要在这个图上找出两条路径,恰好能覆盖所有边一次,根据边的编号输出方案,无解输出-1 一道很不错的欧拉路径变形题 首先要知道关于欧拉路径 ...
- CentOS7.2下安装php加速软件Xcache
说明: php安装目录:/usr/local/php php.ini配置文件路径:/usr/local/php/etc/php.ini Nginx安装目录:/usr/local/nginx Nginx ...
- 清北学堂模拟赛d3t1 a
[问题描述]你是能看到第一题的friends呢.——hja 怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两个单词的各个字母的个 ...
- 51Nod——T 1109 01组成的N的倍数
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1109 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 ...
- 基于zookeeper和强一致性复制实现MySQL分布式数据库集群
http://qikan.cqvip.com/article/detail.aspx?id=667750898&from=zk_search
- Spring MVC新手教程(一)
直接干货 model 考虑给用户展示什么.关注支撑业务的信息构成.构建成模型. control 调用业务逻辑产生合适的数据以及传递数据给视图用于呈献: view怎样对数据进行布局,以一种优美的方式展示 ...
- CreateDialog Win32 API调用的一个小问题
在老版本号的VC编译器上.关键调用是下面2句: InitCommonDialogs(); HWND hwndDialog = CreateDialog(hInstance, "IDD_XXX ...
- apache ant解压zip。支持多级文件夹解压
package cn.liuc.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOExcepti ...
- 体验决定销量,真假4K争论仅仅是忽悠人而已
随着4K电视越来越多.网上关于真假4K电视的争论也越来越激烈,RGB与RGBW的死掐也进入了白热化阶段.从某种意义上讲.真假4K话题是4K电视市场竞争加剧的必定结果.并且这场争论已经严重影响了 ...