java 常用的几种排序方式_java中你用过哪些排序方式-程序员宅基地

技术标签: Java  排序算法  

以下列出Java中常用的几种排序算法,只是简单实现了排序的功能,还有待改进,望指教(以下均假设数组的长度为n):
 
1)冒泡排序:
 
依次比较相邻的两个元素,通过一次比较把未排序序列中最大(或最小)的元素放置在未排序序列的末尾。
 
 
 public class BubbleSort {
 public static void sort(int data[]) {
  for (int i = 0; i < data.length -1; i++) {
   for (int j = 0; j < data.length - i - 1; j++) {
    if (data[j] > data[j + 1]) {
     int temp = data[j];
     data[j] = data[j + 1];
     data[j + 1] = temp;
    }

   }
  }
 }

}
 

 
 
 
 
2)选择排序:
 
每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
 
 
 public class SelectionSort {
 public static void sort(int data[]) {
  int minVal;
  int minIndex;
  for (int i = 0; i < data.length - 1; i++) {
   minVal = data[i];
   minIndex = i;
   for (int j = i + 1; j < data.length; j++) {
    if (data[j] < minVal) {
     minVal = data[j];
     minIndex = j;
    }
   }
   if (minVal != data[i] && minIndex != i) {
    data[minIndex] = data[i];
    data[i] = minVal;
   }
  }

 }

}

 
 
3)插入排序:
 
将数列分为有序和无序两个部分,每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
 
public class InsertionSort {
 public static void sort(int data[]) {
  for (int i = 1; i < data.length; i++) {
   for (int j = i; j > 0; j--) {
    if (data[j] < data[j - 1]) {
     int temp = data[j];
     data[j] = data[j - 1];
     data[j - 1] = temp;
    }
   }
  }
 }
}

 
 
4)归并排序:
 
将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。排序过程如下:
 (1)申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
 (2)设定两个指针,最初位置分别为两个已经排序序列的起始位置
 (3)比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
 (4)重复步骤3直到某一指针达到序列尾
 (5)将另一序列剩下的所有元素直接复制到合并序列尾
 

 
 public class MergeSort {
 public static void sort(int data[], int start, int end) {
  if (start < end) {
   int mid = (start + end) / 2;
   sort(data, start, mid);
   sort(data, mid + 1, end);
   merge(data, start, mid, end);
  }
 }

 public static void merge(int data[], int start, int mid, int end) {
  int temp[] = new int[end - start + 1];
  int i = start;
  int j = mid + 1;
  int k = 0;
  while (i <= mid && j <= end) {
   if (data[i] < data[j]) {
    temp[k++] = data[i++];
   } else {
    temp[k++] = data[j++];
   }
  }

  while (i <= mid) {
   temp[k++] = data[i++];
  }
  while (j <= end) {
   temp[k++] = data[j++];
  }

  for (k = 0, i = start; k < temp.length; k++, i++) {
   data[i] = temp[k];
  }
 }

}

 
 
5)快速排序:
 
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
 

 
 public class QuickSort {
 public static void sort(int data[], int start, int end) {
  if (end - start <= 0) {
   return;
  }
  int last = start;
  for (int i = start + 1; i <= end; i++) {
   if (data[i] < data[start]) {
    int temp = data[++last];
    data[last] = data[i];
    data[i] = temp;
   }
  }
  int temp = data[last];
  data[last] = data[start];
  data[start] = temp;
  sort(data, start, last - 1);
  sort(data, last + 1, end);
 }

}

 

 

转载来源-ygc87

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_29689487/article/details/51453805

智能推荐

内网渗透之命令辅助_内网渗透命令-程序员宅基地

文章浏览阅读2.9k次。文章前言本篇文章主要介绍一些内网渗透中常用的命令~常用命令项目地址:GitHub - Al1ex/Pentest-Command: Pentest-Command相关扩展Wiindows渗透命令:WADComsLinux 命令:GTFOBins_内网渗透命令

Parted 分区_mkpart xfs-程序员宅基地

文章浏览阅读725次。1、查看硬盘信息[root@5gxx-2-32 ~]# fdisk -l #可以看到/dev/vdb 4TDisk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512_mkpart xfs

CVPR 2021 论文大盘点-人脸造假检测篇-程序员宅基地

文章浏览阅读8.4k次,点赞11次,收藏97次。随着图像合成技术的成熟,利用一张人脸照片合成假视频/不良视频现象越来越多,严重侵犯个人隐私、妨碍司法公正,所以人脸造假检测越来越重要,学术界的论文也越来越多。本文总结CVPR 2021 中..._人脸伪造检测

Python-OpenCV人脸检测(代码)_opencv人脸识别代码python-程序员宅基地

文章浏览阅读455次。Python-OpenCV人脸检测(代码)感谢原作者,如有侵权立刻删除@author:wepon原作者的@blog:http://blog.csdn.net/u012162613/article/details/43523507做人脸识别,首先要检测出图片/视频中的人脸,今天就研究了一下opencv的python接_opencv人脸识别代码python

云网络丢包故障定位_netdev_max_backlog-程序员宅基地

文章浏览阅读3.4k次,点赞4次,收藏14次。引言本期分享一个比较常见的⽹络问题—丢包。例如我们去 Ping ⼀个⽹站,如果能 Ping 通,且⽹站返回信息全⾯,则说明与⽹站服务器的通信是畅通的,如果 Ping 不通,或者⽹站返回的信息不全等,则很可能是数据被丢包了,类似情况想必⼤家都不陌⽣。针对⽹络丢包,本⽂提供⼀些常见的丢包故障定位⽅法,希望能够帮助⼤家对⽹络丢包有更多的认识,遇到丢包莫要慌,且跟着⼀起来涨姿(知)势(识)……什么是丢包数据在 Internet 上是以数据包为单位传输的,单位为字节,数据在⽹络上传输,受⽹络设备,⽹络质量等原因_netdev_max_backlog

libtorch (pytorch c++) 教程(一)_libtorch教程-程序员宅基地

文章浏览阅读2.9k次,点赞13次,收藏70次。前言本教程旨在教读者如何用c++写模型,训练模型,根据模型预测对象。为便于教学和使用,本文的c++模型均使用libtorch(或者pytorch c++ api)完成搭建和训练等。目前,国内各大平台似乎没有pytorch在c++上api的完整教学,也没有基于c++开发的完整的深度学习开源模型。可能原因很多:c/c++的深度学习已经足够底层和落地,商用价值较高,开发难度偏大,一般不会开源; 基于python训练,libtorch预测的部署形式足够满足大多数项目的需求,如非产品级应用,不会有人愿意研究_libtorch教程

随便推点

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".-程序员宅基地

文章浏览阅读57次。SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".Spring Cloud 启动提示:SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger imp..._"springcloud feign failed to load class \"org.slf4j.impl.staticloggerbinder\"."

连接 Hive 的四种方法_hive连接-程序员宅基地

文章浏览阅读9.9k次,点赞3次,收藏10次。Running HiveHive CLI$HIVE_HOME/bin/hive(连接命令)HiveServer2 and Beeline$HIVE_HOME/bin/hiveserver2(h2的启动命令)$HIVE_HOME/bin/beeline -u jdbc:hive2://$H2_HOST:$H2_PORT(连接命令)HCatalog$HIVE_HOME/bin/h..._hive连接

CSS3 伪类选择器 nth-child() 的用法_nth-child(3)-程序员宅基地

文章浏览阅读765次。CSS3 伪类选择器 nth-child() 的用法:nth-child()选择某个元素的一个或多个特定的子元素,从这个元素的第一个子元素开始算 .main div:nth-child(3){/*参数是整数*/ background-color: red;/*选择main中的第三个div,将背景颜色改成红色*/ }..._nth-child(3)

Android 如何处理Anr (借用Logcat和Trace 日志)_runnable造成的anr-程序员宅基地

文章浏览阅读4.6k次。文章目录**1.Anr的基础知识****2.编写一个Anr的案例****3. 借用 logcat日志和trace文件分析Anr****获取logcat的日志文件****获取Trace.txt 文件**1.Anr的基础知识在开发中,遇到anr 的原因会有:主线程频繁进行耗时的IO操作:如数据库读写多线程操作的死锁,主线程被block;主线程被Binder 对端block;System Server中WatchDog出现ANR;service binder的连接达到上线无法和和System Se_runnable造成的anr

leetcode83-删除排序链表中的重复元素-python_删除有序链表中的重复元素 python-程序员宅基地

文章浏览阅读242次。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def deleteDuplicates(self, head): ..._删除有序链表中的重复元素 python

python mean函数_数据分布-Python-程序员宅基地

文章浏览阅读52次。前言_sp.mean用法python

推荐文章

热门文章

相关标签