java 排序算法(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次交换。
从以上排序过程可以看出,较大的数像气泡一样向上冒,而较小的数往下沉,故称冒泡法。
2、选择排序
选择法的原理是先将第一个数与后面的每一个数依次比较,不断将将小的赋给第一个数,从而找出最小的,然后第二个数与后面的每一个数依次比较,从而找出第二小的,然后第三个数与后面的
3、插入排序
插入排序的原理是对数组中的第i个元素,认为它前面的i-1个已经排序好,然后将它插入到前面的i-1个元素中。插入排序对少量元素的排序较为有效.
4、快速排序
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此大道整个数据变成有序序列。
java排序算法哪些
排序算法有很多,从简单的开始说吧,
如冒泡:
for (int i = 0; i 《 nums1.length-1; i++) {
for (int j = 0; j 《 nums1.length-i-1; j++) {
if(nums1[j] 》 nums1[j+1]){
int temp = nums1[j];
nums1[j] = nums1[j + 1];
nums1[j + 1] = temp;
}
}
}
选择:
for (int i = 0; i 《 nums.length; i++) {
int min= nums[i];
int minIndex = i;//记录要交换元素的下标
for (int j = i + 1; j 《 nums.length; j++) {//内循环找最小值
if(min 》 nums[j]){
min = nums[j];
minIndex = j;
}
}
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
快速排序等等。
java中如果数组排序,可以直接用Arrays.sort();
java怎么让数组的数字从大到小排序
将数字从大到小排序的方法:
例如简一点的冒泡排序,将第一个数字和后面的数字逐个比较大小,如果小于,则互换位置,大于则不动。此时,第一个数为数组中的最大数。然后再将第二个数与后面的数逐个比较,以次类推。
示例代码如下:
public class Test {
public static void main(String args) {
int array = {12,3,1254,235,435,236,25,34,23};
int temp;
for (int i = 0; i 《 array.length; i++) {
for (int j = i+1; j 《 array.length; j++) {
if (array[i] 《 array[j]) {
temp = array[i];
array[i] = array[j];
array[j] = temp; // 两个数交换位置
}
}
}
for (int i = 0; i 《 array.length; i++) {
System.out.print(array[i]+“ “);
}
}
}
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。
Java 语言中提供的数组是用来存储固定大小的同类型元素。
你可以声明一个数组变量,如 numbers 来代替直接声明 100 个独立变量 number0,number1,....,number99
扩展资料
Java中利用数组进行数字排序一般有4种方法:
1、选择排序是先将数组中的第一个数作为最大或最小数,然后通过循环比较交换最大数或最小数与一轮比较中第一个数位置进行排序。
2、冒泡排序也是先将数组中的第一个数作为最大或最小数,循环比较相邻两个数的大小,满足条件就互换位置,将最大数或最小数沉底。
3、快速排序法主要是运用Arrays类中的Arrays.sort方法()实现。
4、插入排序是选择一个数组中的数据,通过不断的插入比较最后进行排序。
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;
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;i《sort.length;i++){
for(int j=0;j《sort.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;
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;i《sort.length-1;i++){
for(int j = i+1;j《sort.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[start];
// 设置数组左边的索引,往右移动判断比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[start];
sort[start] = 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;
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(data《sort || data》sort[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通过几种经典的算法来实现数组排序
JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法、冒泡法、选择排序法、插入排序法。
快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现。
冒泡法是运用遍历数组进行比较,通过不断的比较将最小值或者最大值一个一个的遍历出来。
选择排序法是将数组的第一个数据作为最大或者最小的值,然后通过比较循环,输出有序的数组。
插入排序是选择一个数组中的数据,通过不断的插入比较最后进行排序。下面我就将他们的实现方法一一详解供大家参考。
《1》利用Arrays带有的排序方法快速排序
public class Test2{ public static void main(String args){ int a={5,4,2,4,9,1}; Arrays.sort(a); //进行排序 for(int i: a){ System.out.print(i); } } }
《2》冒泡排序算法
public static int bubbleSort(int args){//冒泡排序算法 for(int i=0;i《args.length-1;i++){ for(int j=i+1;j《args.length;j++){ if (args[i]》args[j]){ int temp=args[i]; args[i]=args[j]; args[j]=temp; } } } return args; }
《3》选择排序算法
public static int selectSort(int args){//选择排序算法 for (int i=0;i《args.length-1 ;i++ ){ int min=i; for (int j=i+1;j《args.length ;j++ ){ if (args[min]》args[j]){ min=j; } } if (min!=i){ int temp=args[i]; args[i]=args[min]; args[min]=temp; } } return args; }
《4》插入排序算法
public static int insertSort(int args){//插入排序算法 for(int i=1;i《args.length;i++){ for(int j=i;j》0;j--){ if (args[j]《args[j-1]){ int temp=args[j-1]; args[j-1]=args[j]; args[j]=temp; }else break; } } return args; }

更多文章:
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00








