1.冒泡排序

package Sort;

import java.util.Arrays;

public class BubbleSort {
public static void main(String[] args) {
int [] a = {1,100,234,44,3,2,4,5};
bubbleSort(a,a.length+1);
System.out.println(Arrays.toString(a));
}
public static int[] bubbleSort(int[] A, int n) { for (int i=0;i<A.length;i++){
for (int j=i+1;j<A.length;j++){
if (A[i] > A[j]){
int tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
}
} return A;
}
}

2.快速排序

package Sort;

import java.util.Arrays;

public class QuickSort {

    public static void main(String[] args) {
int A[] = {1,6,9, 2, 3, 1, 5, 4 };
quickSort(A, 0, 7);
System.out.println(Arrays.toString(A));
} public static void quickSort(int[] A, int left, int right) { if (left < right) {
// 一次划分
int mid = partion(A, left, right);
quickSort(A, 0, mid - 1);
quickSort(A, mid + 1, right);
}
} public static void swap(int[] A, int l, int r) {
int tmp = A[l];
A[l] = A[r];
A[r] = tmp; } public static int partion(int[] a, int left, int right) {
// 轴值,默认选取数组的第一个数字
while (left < right) {
while (left < right && a[left] <= a[right]) {
right--;
}
if (left<right){
swap(a, left, right);
}
while (left < right && a[left] <= a[right]) {
left++;
}
if (left<right){
swap(a, left, right);
}
}
return left;
} }

3.插入排序

package Sort;

public class InsertionSort {
public int[] insertionSort(int[] A, int n) {
int i, j, temp; for(i = 1; i < n; i++){
temp = A[i];
for(j = i; j > 0 && A[j - 1] > temp; j-- ){
A[j] = A[j - 1];
}
A[j] = temp;
} return A;
}
}

3.1希尔排序(插入排序的一种)

package Sort;

import java.util.Arrays;

public class ShellSort {

    public static void main(String[] args) {
int[] a = { 54, 35, 48, 36, 27, 12, 44, 44, 8, 14, 26, 17, 28 };
sort(a);
System.out.println(Arrays.toString(a));
} public static void sort(int[] a) {
// 设置步长,默认为数组长度的一半
int step = a.length / 2;
while (step >= 1) {
for (int i = step; i < a.length; i += step) {
int tmp = a[i];
int j;
for (j = i; j > 0 && a[j - step] > tmp; j -= step) {
a[j] = a[j - step];//元素后移
}
a[j] = tmp;//插入的位置,注意此时j在for循环中已经进行了一次--
}
step /= 2;
}
} }

4.选择排序

package Sort;

public class SelectionSort {
public int[] selectionSort(int[] A, int n) {
// write code here
for (int i = 0; i < n - 1; i++) {
int index = i;
int j;
// 找出最小值得元素下标
for (j = i + 1; j < n; j++) {
if (A[j] < A[index]) {
index = j;
}
}
int tmp = A[index];
A[index] = A[i];
A[i] = tmp;
}
return A;
}
}

5. 归并排序

package Sort;

public class MergeSort {

    public static void main(String[] args) {

        int[] A = { 1, 4, 3, 2, 5 };
mergeSort(A, 5);
for (int i = 0; i < A.length; i++) {
System.out.println(A[i]); }
} public static int[] mergeSort(int[] A, int n) {
// write code here
sort(A, 0, n - 1);
return A;
} public static void sort(int[] A, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
sort(A, left, mid);
sort(A, mid + 1, right);
merge(A, left, mid, right);
}
} public static void merge(int[] A, int left, int mid, int right) {
// 临时数组 int n = right - left + 1;
int[] tmpArr = new int[n];
int l = left;
int r = mid + 1;
int t = 0;// 临时数组下标元素 // 比较两子序列元素的大小
while (l <= mid && r <= right) {
if (A[l] < A[r]) {
tmpArr[t++] = A[l++];
} else {
tmpArr[t++] = A[r++];
}
} // 剩余的加入临时数组
while (l <= mid) {
tmpArr[t++] = A[l++];
}
// 剩余的加入临时数组
while (r <= right) {
tmpArr[t++] = A[r++];
} // 把临时数组元素放回原数组
for (int i = 0; i < t; i++) {
A[left + i] = tmpArr[i];
} }
}

6.堆排序

package Sort;

import java.util.Arrays;

public class HeapSort {

    public static void main(String[] args) {
int[] a = { 2, 5, 9, 6, 1, 4, 8, 7, 12, 50 };
sort(a);
System.out.println(Arrays.toString(a));
} public static void sort(int[] a) {
int len = a.length;
for (int i = 0; i < len - 1; i++) {
// 建堆
buildHeap(a, len - 1 - i);
// 交换堆顶元素和最后一个元素
swap(a, 0, len - 1 - i);
}
} private static void swap(int[] a, int i, int j) {
// TODO Auto-generated method stub
int tmp = a[i];
a[i] = a[j];
a[j] = tmp; } public static void buildHeap(int[] a, int lastIndex) {
// 从最后一个节点的父节点开始
for (int i = (lastIndex - 1) / 2; i >= 0; i--) {
// 当前节点存在子节点
while (i * 2 + 1 <= lastIndex) {
// 左节点下标值
int l = i * 2 + 1;
// 右结点下标值
int r = i * 2 + 2; // 默认左节点为最大值
int biggerIndex = l;
// 存在右结点
if (l < lastIndex) {
// 右结点的值比左节点大
if (a[r] > a[l]) {
biggerIndex = r;
}
}
// 当前节点的值比孩子节点的最小值小,交换
if (a[i] < a[biggerIndex]) {
swap(a, i, biggerIndex);
// 把最大值下标赋给当前节点,进入下一次while循环判断
i = biggerIndex;
} else {
break;
} } }
} }

7.计数排序

8.基数排序

9.桶排序

九大排序算法的Java实现的更多相关文章

  1. 九大排序算法Java实现

    之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...

  2. C语言实现九大排序算法

    C语言实现九大排序算法 直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序 C语言实现九大排序算法 直接插入排序 将数组分为两个部分,一个是有序部分,一 ...

  3. 8大排序算法的java实现--做个人收藏

    排序算法分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因为数据量太大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.这里只讨论内部排序,常见的内部排序算法有:插入排序 ...

  4. 九大排序算法Demo

    1. 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...

  5. 【转】九大排序算法-C语言实现及详解

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

  6. 你需要知道的九大排序算法【Python实现】之堆排序

    六.堆排序 ​堆排序是一种树形选择排序,是对直接选择排序的有效改进. ​堆的定义下:具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(h ...

  7. 十大排序算法(Java实现)

    一.冒泡排序(Bubble Sort) public class BubbleSort { public static void main(String[] args) { int[] arr = { ...

  8. 你需要知道的九大排序算法【Python实现】之插入排序

    三.插入排序 基本思想:插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算 ...

  9. 你需要知道的九大排序算法【Python实现】之基数排序

    八.基数排序 基本思想:基数排序(radix sort)属于"分配式排序"(distribution sort),又称"桶子法"(bucket sort)或bi ...

随机推荐

  1. mysql 学习心得3

    1 /0和 %0 都会显示null 2比较运算符大部分和c一样 ==在mysql是=  <>代表不等于 between 指定范围内 in指定几何 isnull 判断是否为null :is ...

  2. [Cake] 1. CI中的Cake

    在上一篇C#Make自动化构建-简介中,简单的介绍了下Cake的脚本如何编写以及通过Powershell在本地运行Cake脚本.本篇在此基础上,介绍下如何在CI环境中使用Cake. 1. Cake简介 ...

  3. Docker资源网站收藏

    Docker资源 Docker官方英文资源: docker官网:http://www.docker.com Docker windows入门:https://docs.docker.com/windo ...

  4. 为什么在Python里推荐使用多进程而不是多线程

    转载  http://bbs.51cto.com/thread-1349105-1.html 最近在看Python的多线程,经常我们会听到老手说:"Python下多线程是鸡肋,推荐使用多进程 ...

  5. Linux下安装MySQL数据库(压缩包方式安装)

    1.这里我将Mysql安装在/usr/local/mysql目录里面,也可以安装在其他地方; mkdir /usr/local/mysql 2.下载MySQL压缩包 wget http://dev.M ...

  6. Node 定时器详解

    JavaScript 是单线程运行,异步操作特别重要. 只要用到引擎之外的功能,就需要跟外部交互,从而形成异步操作.由于异步操作实在太多,JavaScript 不得不提供很多异步语法.这就好比,有些人 ...

  7. CSRF的本质及防御

    本质:产生的原因本质上是参数可知或可预测 防御: 1.加密参数:加密加盐,不可知,不可预测      忧虑,引入其他麻烦:一.数据分析困难                               ...

  8. ORACLE虚拟索引(Virtual Index)

    ORACLE虚拟索引(Virtual Index)   虚拟索引概念 虚拟索引(Virtual Indexes)是一个定义在数据字典中的假索引(fake index),它没有相关的索引段.虚拟索引的目 ...

  9. 重磅︱R+NLP:text2vec包——New 文本分析生态系统 No.1(一,简介)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 词向量的表示主流的有两种方式,一种当然是耳熟能 ...

  10. 如何利用Plxmon工具进行在线烧录PCI卡的EEPROM

    PLXMON是PLX公司提供的用于在线烧录PCI卡的EEPROM的工具. 烧录EEPROM有两种方式,一是比较传统的方法,即采用烧录机进行烧录.采用这种方式时,在调试过程中EEPROM需采用插件式封装 ...