java选择排序和冒泡排序(java选择排序和冒泡排序一样吗)

今天给各位分享java选择排序和冒泡排序的知识,其中也会对java选择排序和冒泡排序一样吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、JAVA中有哪几种常用的排序方法?2、选择排序算法与冒泡排序算法有何异同啊?3、java算法面试题:排序都有哪几种方法4、java实现几种常见排序算法5、Java中冒泡排序和选择排序哪一个性能更高一点呢?6、java中简单交换排序,选择排序和冒泡排序间有何区别

JAVA中有哪几种常用的排序方法?

最主要的是冒泡排序、选择排序、插入排序以及快速排序

1、冒泡排序

冒泡排序是一个比较简单的排序方法。在待排序的数列基本有序的情况下排序速度较快。若要排序的数有n个,则需要n-1轮排序,第j轮排序中,从第一个数开始,相邻两数比较,若不符合所要求的顺序,则交换两者的位置;直到第n+1-j个数为止,第一个数与第二个数比较,第二个数与第三个数比较,……,第n-j个与第n+1-j个比较,共比较n-1次。此时第n+1-j个位置上的数已经按要求排好,所以不参加以后的比较和交换操作。

例如:第一轮排序:第一个数与第二个数进行比较,若不符合要求的顺序,则交换两者的位置,否则继续进行二个数与第三个数比较……。直到完成第n-1个数与第n个数的比较。此时第n个位置上的数已经按要求排好,它不参与以后的比较和交换操作;第二轮排序:第一个数与第二个数进行比较,……直到完成第n-2个数与第n-1个数的比较;……第n-1轮排序:第一个数与第二个数进行比较,若符合所要求的顺序,则结束冒泡法排序;若不符合要求的顺序,则交换两者的位置,然后结束冒泡法排序。

共n-1轮排序处理,第j轮进行n-j次比较和至多n-j次交换。

从以上排序过程可以看出,较大的数像气泡一样向上冒,而较小的数往下沉,故称冒泡法。

public void bubbleSort(int a[])

{

int n = a.length;

for(int i=0;in-1;i++)

{

for(int j=0;jn-i-1;j++)

{

if(a[j] a[j+1])

{

int temp = a[j];

a[j] = a[j + 1];

a[j + 1] = temp;

}

}

}

}

2、选择排序

选择法的原理是先将第一个数与后面的每一个数依次比较,不断将将小的赋给第一个数,从而找出最小的,然后第二个数与后面的每一个数依次比较,从而找出第二小的,然后第三个数与后面的每一个数依次比较,从而找出第三小的…..直到找到最后一个数。

public void sort(int x[])

{

int n=x.length;

int k,t;

for(int i=0;in-1;i++)

{

k=i;

for(int j=i+1;j=n;j++)

{

if(x[j]x[k])k=j;

if(k!=i)

{

t=x[i];

x[i]=x[k];

x[k]=t;

}

}

}

}

3、插入排序

插入排序的原理是对数组中的第i个元素,认为它前面的i-1个已经排序好,然后将它插入到前面的i-1个元素中。插入排序对少量元素的排序较为有效.

public void sort(int obj[])

{

for(int j=1;jobj.length;j++)

{

int key=obj[j];

int i=j-1;

while(i=0obj[i]key)

{

obj[i+1]=obj[i];

i–;

}

obj[i+1]=key;

}

}

4、快速排序

快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此大道整个数据变成有序序列。

public void quickSort(int obj[],int low,int high)

{

int i=low;

int j=high;

int keyValue=obj[i];

while(ij)

{

int temp=0;

while(ijobj[j]=keyValue)

{

j=j-1;

}

temp=obj[j];

obj[j]=obj[i];

obj[i]=temp;

while(ijobj[i]=keyValue)

{

i=i+1;

}

temp=obj[j];

obj[j]=ojb[i];

obj[i]=temp;

}

obj[i]=keyValue;

if(lowi-1)

{

quickSort(obj,low,i-1);

}

if(highi+1)

{

quickSort(obj,i+1,high);

}

}

选择排序算法与冒泡排序算法有何异同啊?

区别在于:在交换的方式上

冒泡算法,每次比较如果发现较小的元素在后面,就交换两个相邻的元素。

而选择排序算法的改进在于:先并不急于调换位置,先从A[1]开始逐个检查,看哪个数最小就记下该数所在的位置P,等一躺扫描完毕,再把A[P]和A[1]对调,这时A[1]到A[10]中最小的数据就换到了最前面的位置。

所以,选择排序每扫描一遍数组,只需要一次真正的交换,而冒泡可能需要很多次。比较的次数一样的。

例如:1 2 3 4我们分别用a[0],a[1],a[2],a[3]存储。假设从大到小排序

选择排序,是a[0]和a[1],a[2],a[3]依次比较,遇到小的就交换,这样一次下来,最大的被保存在了a[0].下次排序就从a[1]开始重复以上步骤。

冒泡排序,是a[0]和a[1]比较,小的就交换。然后a[1]和a[2]比较,小的交换。然后a[2]和a[3]比较小的就交换。这样一次下来,最大的被保存在a[0]。下次排序从a[1]开始重复以上步骤。

虽然差不多,但是请注意:两者的比较方法是右差别的,一个事依次比下来,一个是俩俩比较。

扩展资料:

冒泡排序的基本思想是将数组中的每个相邻元素进行两两比较,按照小元素在前(或大元素在前)的原则确定是否进行交换。这样每一轮执行之后,最大(或最小)的元素就会被交换到了最后一位。

同样的过程会依次进行,直到所有元素都被排列成预期的顺序为止。这个过程是不是很像是水中的起泡一个个冒起来的过程.

选择排序(select sort):每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。

参考资料:百度百科-选择排序

java选择排序和冒泡排序(java选择排序和冒泡排序一样吗)

java算法面试题:排序都有哪几种方法

一、冒泡排序

[java] view plain copy

package sort.bubble;

import java.util.Random;

/**

* 依次比较相邻的两个数,将小数放在前面,大数放在后面

* 冒泡排序,具有稳定性

* 时间复杂度为O(n^2)

* 不及堆排序,快速排序O(nlogn,底数为2)

* @author liangge

*

*/

public class Main {

public static void main(String[] args) {

Random ran = new Random();

int[] sort = new int[10];

for(int i = 0 ; i 10 ; i++){

sort[i] = ran.nextInt(50);

}

System.out.print(“排序前的数组为”);

for(int i : sort){

System.out.print(i+” “);

}

buddleSort(sort);

System.out.println();

System.out.print(“排序后的数组为”);

for(int i : sort){

System.out.print(i+” “);

}

}

/**

* 冒泡排序

* @param sort

*/

private static void buddleSort(int[] sort){

for(int i=1;isort.length;i++){

for(int j=0;jsort.length-i;j++){

if(sort[j]sort[j+1]){

int temp = sort[j+1];

sort[j+1] = sort[j];

sort[j] = temp;

}

}

}

}

}

二、选择排序

[java] view plain copy

package sort.select;

import java.util.Random;

/**

* 选择排序

* 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,

* 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

* 选择排序是不稳定的排序方法。

* @author liangge

*

*/

public class Main {

public static void main(String[] args) {

Random ran = new Random();

int[] sort = new int[10];

for (int i = 0; i 10; i++) {

sort[i] = ran.nextInt(50);

}

System.out.print(“排序前的数组为”);

for (int i : sort) {

System.out.print(i + ” “);

}

selectSort(sort);

System.out.println();

System.out.print(“排序后的数组为”);

for (int i : sort) {

System.out.print(i + ” “);

}

}

/**

* 选择排序

* @param sort

*/

private static void selectSort(int[] sort){

for(int i =0;isort.length-1;i++){

for(int j = i+1;jsort.length;j++){

if(sort[j]sort[i]){

int temp = sort[j];

sort[j] = sort[i];

sort[i] = temp;

}

}

}

}

}

三、快速排序

[java] view plain copy

package sort.quick;

/**

* 快速排序 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小,

* 然后再按此方法对这两部分数据分别进行快速排序, 整个排序过程可以递归进行,以此达到整个数据变成有序序列。

* @author liangge

*

*/

public class Main {

public static void main(String[] args) {

int[] sort = { 54, 31, 89, 33, 66, 12, 68, 20 };

System.out.print(“排序前的数组为:”);

for (int data : sort) {

System.out.print(data + ” “);

}

System.out.println();

quickSort(sort, 0, sort.length – 1);

System.out.print(“排序后的数组为:”);

for (int data : sort) {

System.out.print(data + ” “);

}

}

/**

* 快速排序

* @param sort 要排序的数组

* @param start 排序的开始座标

* @param end 排序的结束座标

*/

public static void quickSort(int[] sort, int start, int end) {

// 设置关键数据key为要排序数组的第一个元素,

// 即第一趟排序后,key右边的数全部比key大,key左边的数全部比key小

int key = sort

今天给各位分享java选择排序和冒泡排序的知识,其中也会对java选择排序和冒泡排序一样吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

;

// 设置数组左边的索引,往右移动判断比key大的数

int i = start;

// 设置数组右边的索引,往左移动判断比key小的数

int j = end;

// 如果左边索引比右边索引小,则还有数据没有排序

while (i j) {

while (sort[j] key j start) {

j–;

}

while (sort[i] key i end) {

i++;

}

if (i j) {

int temp = sort[i];

sort[i] = sort[j];

sort[j] = temp;

}

}

// 如果左边索引比右边索引要大,说明第一次排序完成,将sort[j]与key对换,

// 即保持了key左边的数比key小,key右边的数比key大

if (i j) {

int temp = sort[j];

sort[j] = sort

今天给各位分享java选择排序和冒泡排序的知识,其中也会对java选择排序和冒泡排序一样吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

;

sort

今天给各位分享java选择排序和冒泡排序的知识,其中也会对java选择排序和冒泡排序一样吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

= temp;

}

//递归调用

if (j start j end) {

quickSort(sort, start, j – 1);

quickSort(sort, j + 1, end);

}

}

}

[java] view plain copy

/**

* 快速排序

*

* @param a

* @param low

* @param high

* voidTest

*/

public static void kuaisuSort(int[] a, int low, int high)

{

if (low = high)

{

return;

}

if ((high – low) == 1)

{

if (a[low] a[high])

{

swap(a, low, high);

return;

}

}

int key = a[low];

int left = low + 1;

int right = high;

while (left right)

{

while (left right left = high)// 左边向右

{

if (a[left] = key)

{

break;

}

left++;

}

while (right = left right low)

{

if (a[right] = key)

{

break;

}

right–;

}

if (left right)

{

swap(a, left, right);

}

}

swap(a, low, right);

kuaisuSort(a, low, right);

kuaisuSort(a, right + 1, high);

}

四、插入排序

[java] view plain copy

package sort.insert;

/**

* 直接插入排序

* 将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据

* 算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。

*/

import java.util.Random;

public class DirectMain {

public static void main(String[] args) {

Random ran = new Random();

int[] sort = new int[10];

for (int i = 0; i 10; i++) {

sort[i] = ran.nextInt(50);

}

System.out.print(“排序前的数组为”);

for (int i : sort) {

System.out.print(i + ” “);

}

directInsertSort(sort);

System.out.println();

System.out.print(“排序后的数组为”);

for (int i : sort) {

System.out.print(i + ” “);

}

}

/**

* 直接插入排序

*

* @param sort

*/

private static void directInsertSort(int[] sort) {

for (int i = 1; i sort.length; i++) {

int index = i – 1;

int temp = sort[i];

while (index = 0 sort[index] temp) {

sort[index + 1] = sort[index];

index–;

}

sort[index + 1] = temp;

}

}

}

顺便添加一份,差不多的

[java] view plain copy

public static void charuSort(int[] a)

{

int len = a.length;

for (int i = 1; i len; i++)

{

int j;

int temp = a[i];

for (j = i; j 0; j–)//遍历i之前的数字

{

//如果之前的数字大于后面的数字,则把大的值赋到后面

if (a[j – 1] temp)

{

a[j] = a[j – 1];

} else

{

break;

}

}

a[j] = temp;

}

}

把上面整合起来的一份写法:

[java] view plain copy

/**

* 插入排序:

*

*/

public class InsertSort {

public void sort(int[] data) {

for (int i = 1; i data.length; i++) {

for (int j = i; (j 0) (data[j] data[j – 1]); j–) {

swap(data, j, j – 1);

}

}

}

private void swap(int[] data, int i, int j) {

int temp = data[i];

data[i] = data[j];

data[j] = temp;

}

}

五、顺便贴个二分搜索法

[java] view plain copy

package search.binary;

public class Main {

public static void main(String[] args) {

int[] sort = {1,2,3,4,5,6,7,8,9,10};

int mask = binarySearch(sort,6);

System.out.println(mask);

}

/**

* 二分搜索法,返回座标,不存在返回-1

* @param sort

* @return

*/

private static int binarySearch(int[] sort,int data){

if(datasort[0] || datasort[sort.length-1]){

return -1;

}

int begin = 0;

int end = sort.length;

int mid = (begin+end)/2;

while(begin = end){

mid = (begin+end)/2;

if(data sort[mid]){

begin = mid + 1;

}else if(data sort[mid]){

end = mid – 1;

}else{

return mid;

}

}

return -1;

}

}

java实现几种常见排序算法

下面给你介绍四种常用排序算法:

1、冒泡排序

特点:效率低,实现简单

思想(从小到大排):每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往前排。

2、选择排序

特点:效率低,容易实现。

思想:每一趟从待排序序列选择一个最小的元素放到已排好序序列的末尾,剩下的位待排序序列,重复上述步骤直到完成排序。

3、插入排序

特点:效率低,容易实现。

思想:将数组分为两部分,将后部分元素逐一与前部分元素比较,如果当前元素array[i]小,就替换。找到合理位置插入array[i]

4、快速排序

特点:高效,时间复杂度为nlogn。

采用分治法的思想:首先设置一个轴值pivot,然后以这个轴值为划分基准将待排序序列分成比pivot大和比pivot小的两部分,接下来对划分完的子序列进行快排直到子序列为一个元素为止。

Java中冒泡排序和选择排序哪一个性能更高一点呢?

一般来说选择比冒泡效率高;

冒泡排序在内循环交换,选择排序在外循环交换,效率差也就在这个交换次数上,毕竟O(n)O(n^2)。如果数组完全有序,冒泡内循环的交换一次都不会执行,而选择排序每次还要和本身交换一次,此时冒泡效率高。但这种情况极少,所以从算法的角度看,选择优于冒泡。

java中简单交换排序,选择排序和冒泡排序间有何区别

这是算法层面的问题,和java没有什么关系

选择排序和冒泡排序都是基于元素交换的,因此你的分类错误

冒泡排序基本思想:每次将最重的一个沉入海底

选择排序基本思想:每次扫描最重的一个与第一个交换

并且,选择和冒泡的时间复杂度是一样的(都是O(N^2))

所以在实际生活中作用不大,一般的语言(比如java,c++,c)都有实现好的排序算法

比如c语言中的qsort(采用快速排序),c++的stl里面的sort(采用多种方式混合式排序)

java里面的sort方法(也是混合式排序,元素少的时候用了冒泡,元算多的时候用了归并排序)

当然算法是要学习的,这些算法自己都要理解,用的时候呢,就用现成的就好了,如果有特殊需求的排序,当然你可以自己实现比较器

java选择排序和冒泡排序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java选择排序和冒泡排序一样吗、java选择排序和冒泡排序的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月30日 14:50:53
下一篇 2024年3月30日 15:01:09

相关推荐

  • 深入java虚拟机pdf,深入java虚拟机 中村成洋 pdf

    在linux环境下,java怎么实现从word格式转换为pdf格式 //设置当前使用的打印机,我的Adobe Distiller打印机名字为 Adobe PDF wordCom.setProperty( ActivePrinter , new Variant( Adobe PDF ));//设置printout的参数,将word文档打印为postscript…

    2024年5月23日
    4400
  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4200
  • java绑定一个端口,java使用端口

    java如何多个service共用一个端口 你如果有多个项目的话,你可以把多个项目放到一个tomcat里面,这样端口相同使用项目名称来进行区分项目。你如果非要使用同一个,你也可以配置不同的域名导向不同的项目。就是访问的域名不同转接到的项目不同。 如果需要同时启动多个程序,要么修改tomcat的配置文件中的监听端口。要么修改jar包程序的监听端口。不能在一台服…

    2024年5月23日
    3400
  • java多线程并发编程基础,Java多线程并发执行返回

    电脑培训分享Java并发编程:核心理论 电脑培训发现本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。 人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接…

    2024年5月23日
    4600
  • 自学java找工作,自学java找工作需要包装简历吗

    自学java学多久可以找到工作 1、自学Java至少需要一年以上的时间才能达到找工作的水平。报班培训四到六个月的时间就可以找到一份不错的工作。 2、自学Java至少需要一年以上的时间才能达到找工作的水平。 3、如果要想找到一份Java相关的工作,需要至少学习5-6个月时间才能就业。Java开发需要掌握一些基础的编程语言知识,比如掌握面向对象的编程思想、基本的…

    2024年5月23日
    4300
  • java左移右移,java 左移

    java位移问题 1、思路:直接用Integer类的bit运算操作。 2、移位操作:左移:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。 3、Java 位运算 Java 位运算[转]一,Java 位运算表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的…

    2024年5月23日
    4100
  • java技术规范,java规范性要求

    现在主流的JAVA技术是什么? java最流行开发技术程序员必看 1 、Git Git一直是世界上最受欢迎的Java工具之一,也是Java开发人员最杰出的工具之一。Git是一个开源工具,是-种出色的分布式版本控制解决方案。 (1).Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱和注解。(2).Java面向对象编…

    2024年5月23日
    4000
  • javasocket编程,Java socket编程中,禁用nagle算法的参数

    Java进行并发多连接socket编程 1、Java可利用ServerSocket类对外部客户端提供多个socket接口。基本的做法是先创建一个ServerSocket实例,并绑定一个指定的端口,然后在这个实例上调用accept()方法等待客户端的连接请求。 2、Socket socket=server.accept(0;Thread handleThrea…

    2024年5月23日
    4600
  • java死亡,java死代码是什么意思

    我的世界传送回死亡点指令是什么? 1、下面就让我们一起来了解一下吧:我的世界回到死的地方的指令是输入/back,就可以回到死亡地点了,当然也可以看信标,因为死亡后会有一道光集中在死亡点,只要循着光就可以找到目的地了。 2、在服务器中的指令 首先打开指令台,在指令行输入“/back”就可以回到自己的死亡地点了。在单人游戏中的指令 在单人游戏中,您无法直接返回到…

    2024年5月23日
    4800
  • myeclipse能部署java工程么,myeclipse支持jdk18

    myeclipse如何建java文件 1、点击【File】—【New】–【Class】在如下界面,输入Class的名字,如Test,点击【Finish】。Test.java文件创建成功。 2、点击【File】—【New】–【Class】 在如下界面,输入Class的名字,如Test,点击【Finish】。 Te…

    2024年5月23日
    3900

发表回复

登录后才能评论



关注微信