java几种常用的算法

1)冒泡排序:

依次比较相邻的两个元素,通过一次比较把未排序序列中最大(或最小)的元素放置在未排序序列的末尾。


  1. public class BubbleSort {
  2. public static void sort(int data[]) {
  3. for (int i = 0; i < data.length -1; i++) {
  4. for (int j = 0; j < data.length - i - 1; j++) {
  5. if (data[j] > data[j + 1]) {
  6. int temp = data[j];
  7. data[j] = data[j + 1];
  8. data[j + 1] = temp;
  9. }
  10. }
  11. }
  12. }
  13. }

2)选择排序:

每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

  1. public class SelectionSort {
  2. public static void sort(int data[]) {
  3. int minVal;
  4. int minIndex;
  5. for (int i = 0; i < data.length - 1; i++) {
  6. minVal = data[i];
  7. minIndex = i;
  8. for (int j = i + 1; j < data.length; j++) {
  9. if (data[j] < minVal) {
  10. minVal = data[j];
  11. minIndex = j;
  12. }
  13. }
  14. if (minVal != data[i] && minIndex != i) {
  15. data[minIndex] = data[i];
  16. data[i] = minVal;
  17. }
  18. }
  19. }
  20. }

3)插入排序:

将数列分为有序和无序两个部分,每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。

 

  1. public class InsertionSort {
  2. public static void sort(int data[]) {
  3. for (int i = 1; i < data.length; i++) {
  4. for (int j = i; j > 0; j--) {
  5. if (data[j] < data[j - 1]) {
  6. int temp = data[j];
  7. data[j] = data[j - 1];
  8. data[j - 1] = temp;
  9. }
  10. }
  11. }
  12. }
  13. }

4)归并排序:

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

 

  1. public class MergeSort {
  2. public static void sort(int data[], int start, int end) {
  3. if (start < end) {
  4. int mid = (start + end) / 2;
  5. sort(data, start, mid);
  6. sort(data, mid + 1, end);
  7. merge(data, start, mid, end);
  8. }
  9. }
  10. public static void merge(int data[], int start, int mid, int end) {
  11. int temp[] = new int[end - start + 1];
  12. int i = start;
  13. int j = mid + 1;
  14. int k = 0;
  15. while (i <= mid && j <= end) {
  16. if (data[i] < data[j]) {
  17. temp[k++] = data[i++];
  18. } else {
  19. temp[k++] = data[j++];
  20. }
  21. }
  22. while (i <= mid) {
  23. temp[k++] = data[i++];
  24. }
  25. while (j <= end) {
  26. temp[k++] = data[j++];
  27. }
  28. for (k = 0, i = start; k < temp.length; k++, i++) {
  29. data[i] = temp[k];
  30. }
  31. }
  32. }

5)快速排序:

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

 

    1. public class QuickSort {
    2. public static void sort(int data[], int start, int end) {
    3. if (end - start <= 0) {
    4. return;
    5. }
    6. int last = start;
    7. for (int i = start + 1; i <= end; i++) {
    8. if (data[i] < data[start]) {
    9. int temp = data[++last];
    10. data[last] = data[i];
    11. data[i] = temp;
    12. }
    13. }
    14. int temp = data[last];
    15. data[last] = data[start];
    16. data[start] = temp;
    17. sort(data, start, last - 1);
    18. sort(data, last + 1, end);
    19. }
    20. }
时间: 2024-10-06 16:07:06

java几种常用的算法的相关文章

Java几种常用的实现排序方法

import java.util.Random; public class NumberSort{ /** * 私有构造方法,禁止实例化 */ private NumberSort(){ super(); } /** * 冒泡排序 * 比较相邻的元素.如果第一个比第二个大,就叫唤他们两个位置. * 对每一组相邻的元素作同样的工作,从开始的第一对到结束后的最后一对,这样剩下的最后一个应该是最大的数. * 针对所有元素重复以上操作,除了最后一个. * 持续对越来越少的数进行以上的操作,直到没有任何一

七种常用排序算法

七种常用排序算法 一.常见排序算法一览: 时间复杂度: 是一个函数,它定量描述了该算法的运行时间. 空间复杂度:一个算法在运行过程中临时占用存储空间大小的量度. 稳定性:保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同就稳定,反之不稳定. 视觉直观感受 7 种常用的排序算法 二.算法C#实现: 1. 直接插入排序: using System; using System.Collections.Generic; using System.Linq; using Sys

五种常用的算法设计技巧之二:分治算法

一,介绍 分治算法主要包含两个步骤:分.治.分,就是递归地将原问题分解成小问题:治则是:在解决了各个小问题之后(各个击破之后)合并小问题的解,从而得到整个问题的解 二,分治递归表达式 分治算法一般都可以写出一个递归表达式:比如经典的归并排序的递归表达式:T(N)=2T(N/2)+O(N) T(N)代表整个原问题,采用了分治解决方案后,它可以表示成: ①分解成了两个规模只有原来一半(N/2)的子问题:T(N/2) ②当解决完这两个子问题T(N/2)之后,再合并这两个子问题需要的代价是 O(N) 递

几种常用排序算法温习

几种常用排序算法温习 一. 简单排序方法 1.直接插入排序 基本思想:顺序地将待排序的记录按其关键码的大小插入到已排序的记录子序列的适当位置. 算法代码: //直接插入排序 public static void InsertSort(SeqList<int> seq) { if (seq.IsEmpty() || seq.GetLength() == 1) return; Console.Write("1.1 简单排序 排序前:"); seq.Display(); int

几种常用排序算法的python实现

1:快速排序 思想: 任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序. 一趟快速排序的算法是: 1)设置两个变量i.j,排序开始的时候:i=0,j=N-1: 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]: 3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i]: 4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大

几种常用排序算法(bubble、select、insert、shell、未完待续)

接下来两天重新看看几种常用的排序算法. 1.冒泡排序法 每次从 i=0开始比较相邻的元素,若arr[i]>arr[i+1],则交换它们.直到把最大的元素推向最后.回到 i=0,直至完成. 1 import java.util.Scanner; 2 class bubble 3 { 4 public static void main(String[] args) 5 { 6 int n,temp; 7 int i,j; 8 int[] arr=new int[10000]; 9 Scanner s

视觉直观感受7种常用排序算法

视觉直观感受若干常用排序算法 1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性. 步骤: 从数列中挑出一个元素,称为 "基准"(pivo

几种常用排序算法 (一)

八大常用排序算法详细分析 包括复杂度: 排序有可以分为以下几类: (1).交换排序:冒泡排序.快速排序 (2).选择排序:直接选择排序.堆排序 (3).插入排序:直接插入排序.希尔排序 (4).归并排序 (5).基数排序(桶排序) 1.冒泡排序 顾名思义,冒泡排序就是用气泡从下往上冒的原理,将气泡(较小或较大的数)依次往前移. 具体做法(升序):设总共有N个元素,则至少需要进行N-1次冒泡.一次排序排序中,若前一个元素大于后一个元素,则交换两个元素,然后在依次判  断后面两两相邻元素大小并进行交

几种常用hash算法及原理

计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数据.用“人 类”的语言描述单向函数就是:如果某个函数在给定输入的时候,很容易计算出其结果来:而当给定结果的时候,很难计算出输入来,这就是单项函数.各种加密函 数都可以被认为是单向函数的逼近.Hash函数(或者成为散列函数)也可以看成是单向函数的一个逼近.即它接近于满足单向函数的定义. Hash函数还有另外的含义.实际中的Hash函数是指把一个大范围映射到一个小范围.把大