「java数码排序」java快速排序代码

博主:adminadmin 2023-01-18 03:36:05 374

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

本文目录一览:

java 输入任意几个数字,怎样将他们从大到小排序?

public static void main(String[] args) { Scanner scan = new Scanner(System.in)。

}

System.out.println("从大到小输出:");

for (int m = num.length-1; m =0; m--) {

System.out.println(num[m]);//从大到小输出

}

}

String[] str = scan.nextLine().split(" "),// 输入时以空格隔开数字。

int[] num = new int[str.length];//初始化一个整型数组,长度为你输入数字的个数。

String[] str = scan.nextLine().split(" ");// 输入时以空格隔开数字

int[] num = new int[str.length];//初始化一个整型数组,长度为你输入数字的个数

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

num[i] = Integer.parseInt(String.valueOf(str[i]));//将字符转换为int型再赋给整型数组

}

Arrays.sort(num);//升序排序

System.out.println("从小到大输出:");

for (int j = 0; j num.length; j++) {

System.out.println(num[j]);//从小到大输出

JAVA 将数字并排排列

实现思路:就是输入的数字之间有固定的规则,之后读取后,依次进行大小比较,之后直到排序结束,输出结果即可:

import java.util.Scanner;

public class ArrangedNumbers {

Integer arryNum[];

int count = 0;/* 统计数字 */

boolean judgeIsNum = true;

StringBuffer stringbuffer = new StringBuffer();

Scanner scanner = new Scanner(System.in);

String character;

int memoryNum;

/**

* 任意输入字符

*

* @return 返回输入的内容

*/

// public String inputNum() {

// return null;

// }

/**

* 判断为数字

*/

public void judgmentFigures() {

while (judgeIsNum) {

System.out.println("请任意输入数字,以空格间隔,以回车结束!");

character = scanner.nextLine();

char[] figures = character.toCharArray();

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

if (!(figures[i] = '1' figures[i] = '9')

figures[i] != 32) {

judgeIsNum = true;

break;

}

judgeIsNum = false;

}

if (!judgeIsNum)

stringbuffer.append(character);

}

String inputContent = stringbuffer.toString();

String[] numbers = inputContent.split("\\s+");

arryNum = new Integer[numbers.length];

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

try {

memoryNum = Integer.parseInt(numbers[i]);

arryNum[count] = new Integer(memoryNum).intValue();

count++;

} catch (Exception e) {

/* 如果不出现异常,则说明肯定是数字 */

}

}

}

/**

* 对数字进行排序

*/

public void compareNum() {

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

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

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

Integer temp = arryNum[j];

arryNum[j] = arryNum[j + 1];

arryNum[j + 1] = temp;

}

}

}

}

/**

* 按升序排列输出

*/

public void outputNum() {

System.out.println("按升序排序:");

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

System.out.println(arryNum[i]);

}

}

}

//package com.color.program;

public class JJArrangedNumbers {

public static void main(String args[]) {

ArrangedNumbers arrangeNumbers = new ArrangedNumbers();

arrangeNumbers.judgmentFigures();

arrangeNumbers.compareNum();

arrangeNumbers.outputNum();

}

}

--------运行结果-------

请任意输入数字,以空格间隔,以回车结束!

123 4 5 6 7 7,23

请任意输入数字,以空格间隔,以回车结束!

2 e adf 3 4

请任意输入数字,以空格间隔,以回车结束!

5 6 6 76 7

按升序排序:

5

6

6

7

76

上述公式可以修改为:=-*INT(/)。MONTH函数函

请给出java几种排序方法

java常见的排序分为:

1 插入类排序

主要就是对于一个已经有序的序列中,插入一个新的记录。它包括:直接插入排序,折半插入排序和希尔排序

2 交换类排序

这类排序的核心就是每次比较都要“交换”,在每一趟排序都会两两发生一系列的“交换”排序,但是每一趟排序都会让一个记录排序到它的最终位置上。它包括:起泡排序,快速排序

3 选择类排序

每一趟排序都从一系列数据中选择一个最大或最小的记录,将它放置到第一个或最后一个为位置交换,只有在选择后才交换,比起交换类排序,减少了交换记录的时间。属于它的排序:简单选择排序,堆排序

4 归并类排序

将两个或两个以上的有序序列合并成一个新的序列

5 基数排序

主要基于多个关键字排序的。

下面针对上面所述的算法,讲解一些常用的java代码写的算法

二 插入类排序之直接插入排序

直接插入排序,一般对于已经有序的队列排序效果好。

基本思想:每趟将一个待排序的关键字按照大小插入到已经排序好的位置上。

算法思路,从后往前先找到要插入的位置,如果小于则就交换,将元素向后移动,将要插入数据插入该位置即可。时间复杂度为O(n2),空间复杂度为O(1)

package sort.algorithm;

public class DirectInsertSort {

public static void main(String[] args) {

// TODO Auto-generated method stub

int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20 };

int temp, j;

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

temp = data[i];

j = i - 1;

// 每次比较都是对于已经有序的

while (j = 0 data[j] temp) {

data[j + 1] = data[j];

j--;

}

data[j + 1] = temp;

}

// 输出排序好的数据

for (int k = 0; k data.length; k++) {

System.out.print(data[k] + " ");

}

}

}

三 插入类排序之折半插入排序(二分法排序)

条件:在一个已经有序的队列中,插入一个新的元素

折半插入排序记录的比较次数与初始序列无关

思想:折半插入就是首先将队列中取最小位置low和最大位置high,然后算出中间位置mid

将中间位置mid与待插入的数据data进行比较,

如果mid大于data,则就表示插入的数据在mid的左边,high=mid-1;

如果mid小于data,则就表示插入的数据在mid的右边,low=mid+1

最后整体进行右移操作。

时间复杂度O(n2),空间复杂度O(1)

package sort.algorithm;

//折半插入排序

public class HalfInsertSort {

public static void main(String[] args) {

int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20 };

// 存放临时要插入的元素数据

int temp;

int low, mid, high;

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

temp = data[i];

// 在待插入排序的序号之前进行折半插入

low = 0;

high = i - 1;

while (low = high) {

mid = (low + high) / 2;

if (temp data[mid])

high = mid - 1;

else

// low=high的时候也就是找到了要插入的位置,

// 此时进入循环中,将low加1,则就是要插入的位置了

low = mid + 1;

}

// 找到了要插入的位置,从该位置一直到插入数据的位置之间数据向后移动

for (int j = i; j = low + 1; j--)

data[j] = data[j - 1];

// low已经代表了要插入的位置了

data[low] = temp;

}

for (int k = 0; k data.length; k++) {

System.out.print(data[k] + " ");

}

}

}

四 插入类排序之希尔排序

希尔排序,也叫缩小增量排序,目的就是尽可能的减少交换次数,每一个组内最后都是有序的。

将待续按照某一种规则分为几个子序列,不断缩小规则,最后用一个直接插入排序合成

空间复杂度为O(1),时间复杂度为O(nlog2n)

算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

package sort.algorithm;

public class ShellSort {

public static void main(String[] args) {

int a[] = { 1, 54, 6, 3, 78, 34, 12, 45, 56, 100 };

double d1 = a.length;

int temp = 0;

while (true)

{

//利用这个在将组内倍数减小

//这里依次为5,3,2,1

d1 = Math.ceil(d1 / 2);

//d为增量每个分组之间索引的增量

int d = (int) d1;

//每个分组内部排序

for (int x = 0; x d; x++)

{

//组内利用直接插入排序

for (int i = x + d; i a.length; i += d) {

int j = i - d;

temp = a[i];

for (; j = 0 temp a[j]; j -= d) {

a[j + d] = a[j];

}

a[j + d] = temp;

}

}

if (d == 1)

break;

}

for (int i = 0; i a.length; i++)

System.out.print(a[i]+" ");

}

}

五 交换类排序之冒泡排序

交换类排序核心就是每次比较都要进行交换

冒泡排序:是一种交换排序

每一趟比较相邻的元素,较若大小不同则就会发生交换,每一趟排序都能将一个元素放到它最终的位置!每一趟就进行比较。

时间复杂度O(n2),空间复杂度O(1)

package sort.algorithm;

//冒泡排序:是一种交换排序

public class BubbleSort {

// 按照递增顺序排序

public static void main(String[] args) {

// TODO Auto-generated method stub

int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20, 13, 100, 37, 16 };

int temp = 0;

// 排序的比较趟数,每一趟都会将剩余最大数放在最后面

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

// 每一趟从开始进行比较,将该元素与其余的元素进行比较

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

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

temp = data[j];

data[j] = data[j + 1];

data[j + 1] = temp;

}

}

}

for (int i = 0; i data.length; i++)

System.out.print(data[i] + " ");

}

}

java 输入任意数字后排序

public static void main(String[] args) {

int[] source = { 1, 20, 13, 100, 55 };

ascSort(source);

System.out.println("升序排列:" + Arrays.toString(source));

descSort(source);

System.out.println("降序排列:" + Arrays.toString(source));

}

/**

 * 升序排列数组

 * 

 * @param arr

 */

public static void ascSort(int[] arr) {

if (arr != null  arr.length  0) {

Arrays.sort(arr);

}

}

/**

 * 降序排列数组

 * 

 * @param arr

 */

public static void descSort(int[] arr) {

if (arr != null  arr.length  0) {

Arrays.sort(arr);

int length = arr.length;

int temp = 0;

for (int i = 0; i  length / 2; i++) {

temp = arr[i];

arr[i] = arr[length - 1 - i];

arr[length - 1 - i] = temp;

}

}

}

java数码排序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java快速排序代码、java数码排序的信息别忘了在本站进行查找喔。