「java指令排序」java的排序代码

博主:adminadmin 2022-12-22 07:15:08 70

本篇文章给大家谈谈java指令排序,以及java的排序代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java几种简单的排序源代码

给你介绍4种排序方法及源码,供参考

1.冒泡排序

主要思路: 从前往后依次交换两个相邻的元素,大的交换到后面,这样每次大的数据就到后面,每一次遍历,最大的数据到达最后面,时间复杂度是O(n^2)。

public static void bubbleSort(int[] arr){

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

for(int j=0; j  arr.length-1; j++){

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

arr[j] = arr[j]^arr[j+1];

arr[j+1] = arr[j]^arr[j+1];

arr[j] = arr[j]^arr[j+1];

}

}

}

}

2.选择排序

主要思路:每次遍历序列,从中选取最小的元素放到最前面,n次选择后,前面就都是最小元素的排列了,时间复杂度是O(n^2)。

public static void selectSort(int[] arr){

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

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

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

arr[j] = arr[j]^arr[i];

arr[i] = arr[j]^arr[i];

arr[j] = arr[j]^arr[i];

}

}

}

}

3.插入排序

主要思路:使用了两层嵌套循环,逐个处理待排序的记录。每个记录与前面已经排好序的记录序列进行比较,并将其插入到合适的位置,时间复杂度是O(n^2)。

public static void insertionSort(int[] arr){

int j;

for(int p = 1; p  arr.length; p++){

int temp = arr[p];   //保存要插入的数据

//将无序中的数和前面有序的数据相比,将比它大的数,向后移动

for(j=p; j0  temp arr[j-1]; j--){

arr[j] = arr[j-1];

}

//正确的位置设置成保存的数据

arr[j] = temp;

}

}

4.希尔排序

主要思路:用步长分组,每个分组进行插入排序,再慢慢减小步长,当步长为1的时候完成一次插入排序,  希尔排序的时间复杂度是:O(nlogn)~O(n2),平均时间复杂度大致是O(n^1.5)

public static void shellSort(int[] arr){

int j ;

for(int gap = arr.length/2; gap  0 ; gap/=2){

for(int i = gap; i  arr.length; i++){

int temp = arr[i];

for(j = i; j=gap  temparr[j-gap]; j-=gap){

arr[j] = arr[j-gap];

}

arr[j] = temp;

}

}

}

java指令重排序,happens-before的问题

重排序有一条原则,就是单线程运行这段代码不能影响得到的结果(这段代码虽然另起一个线程,但本身是由一个线程“引发”的)所以顺序没变,这也是很多人试的结果——没变。但提到重排序理论上又觉得可能变,所以以上解释算是我个人理解吧。重排序旨在尽可能的利用流水思想,复用寄存器减少读写,但最根本的还是要保障正确性,否则效率高没一点意义。编译器的行为应该还是慎重的(这里的例子应该也是编译时重排序)

JAVA程序设计如何从高到低将从命令行读取的一组数字进行降序排序?

import java.util.Arrays;

import java.util.Scanner;

public class Test4 {

public static void main(String[] args) {

System.out.print("输入一串纯数字后按Enter键:");

Scanner sc = new Scanner(System.in);

String inps = sc.nextLine();

int maxNum = 0;

if(inps.trim().length()==0){

System.err.println("未输入有效数字内容!");

return;

}

Object[] inpsArr = new Object[0];

if(inps.indexOf(",")-1){

inpsArr = inps.split(",");//如果带有英文逗号则以逗号分隔拆分为数组

}else{

char[] charArray = inps.toCharArray();//否则拆分为数组时把每一个字符作为数组的一个元素

inpsArr = new Object[charArray.length];

for (int i = 0; i charArray.length; i++) {

char c = charArray[i];

inpsArr[i] = String.valueOf(c);

}

}

Object[] xx2 = sorts(inpsArr);//排序

System.out.println(Arrays.asList(xx2));//打印排序结果

}

/**

* 从大到小对数组元素进行排序,数组中的不可转换为数值的元素将保持原位置不变,不参与排序

* @param soureArr : 待排序的数组

* @return 排序好的数组

*/

static Object[] sorts(Object[] soureArr){

Object[] arr = Arrays.copyOf(soureArr, soureArr.length);//复制一份副本进行操作,不改变原数组内容

Double d = 0d;//允许元素带有小数点

Double d2 = 0d;//允许元素带有小数点

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

String ss = String.valueOf(arr[i]);

try{

d = Double.valueOf(ss);

}catch(Exception e){

continue;//跳过 不可转换为数值的元素

}

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

String ss2 = String.valueOf(arr[j]);

try{

d2 = Double.valueOf(ss2);

}catch(Exception e){

continue;//跳过 不可转换为数值的元素

}

if(d d2){//排序方式:dd2为降序,dd2为升序

arr[i] = ss2;

arr[j] = ss;

ss = ss2;

d = d2;

}

}

}

return arr;

}

}

java实现几种常见排序算法

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

1、冒泡排序

特点:效率低,实现简单

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

2、选择排序

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

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

3、插入排序

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

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

4、快速排序

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

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

java几种基本排序

/**

     * 冒泡排序

     * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。  

     * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。  

     * 针对所有的元素重复以上的步骤,除了最后一个。

     * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 

     * @param numbers 需要排序的整型数组

     */

    public static void bubbleSort(int[] numbers)

    {

        int temp = 0;

        int size = numbers.length;

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

        {

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

        {

            if(numbers[j]  numbers[j+1])  //交换两数位置

            {

            temp = numbers[j];

            numbers[j] = numbers[j+1];

            numbers[j+1] = temp;

            }

        }

        }

    }

快速排序的基本思想:

         通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。

/**

     * 查找出中轴(默认是最低位low)的在numbers数组排序后所在位置

     * 

     * @param numbers 带查找数组

     * @param low   开始位置

     * @param high  结束位置

     * @return  中轴所在位置

     */

    public static int getMiddle(int[] numbers, int low,int high)

    {

        int temp = numbers[low]; //数组的第一个作为中轴

        while(low  high)

        {

        while(low  high  numbers[high]  temp)

        {

            high--;

        }

        numbers[low] = numbers[high];//比中轴小的记录移到低端

        while(low  high  numbers[low]  temp)

        {

            low++;

        }

        numbers[high] = numbers[low] ; //比中轴大的记录移到高端

        }

        numbers[low] = temp ; //中轴记录到尾

        return low ; // 返回中轴的位置

    }

    

    递归形式的分治排序算法:

    /**

     * 

     * @param numbers 带排序数组

     * @param low  开始位置

     * @param high 结束位置

     */

    public static void quickSort(int[] numbers,int low,int high)

    {

        if(low  high)

        {

        int middle = getMiddle(numbers,low,high); //将numbers数组进行一分为二

        quickSort(numbers, low, middle-1);   //对低字段表进行递归排序

        quickSort(numbers, middle+1, high); //对高字段表进行递归排序

        }

    

    }

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);

}

}

关于java指令排序和java的排序代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。