日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java实现各种排序算法

發布時間:2023/12/13 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实现各种排序算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

曾經學數據結構的時候,各種排序練的很熟,但是想過用Java怎么實現嗎,以下給出來給你看看,當然閑著就當學習數據結構了,因為jdk提供的工具足夠你應付所有事情。

插入排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class InsertSort implements SortUtil.Sort{

?? public void sort(int[] data) {

? ? int temp;

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

? ? ? ? for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){

? ? ? ? ? SortUtil.swap(data,j,j-1);

? ? ? ? }

? ? } ? ?

? }

}

?

冒泡排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class BubbleSort implements SortUtil.Sort{

?? public void sort(int[] data) {

? ? int temp;

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

? ? ? ? for(int j=data.length-1;j>i;j--){

? ? ? ? ? if(data[j]<data[j-1]){

? ? ? ? ? ? SortUtil.swap(data,j,j-1);

? ? ? ? ? }

? ? ? ? }

? ? }

? }

}

選擇排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class SelectionSort implements SortUtil.Sort {

?? public void sort(int[] data) {

? ? int temp;

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

? ? ? ? int lowIndex = i;

? ? ? ? for (int j = data.length - 1; j > i; j--) {

? ? ? ? ? if (data[j] < data[lowIndex]) {

? ? ? ? ? ? lowIndex = j;

? ? ? ? ? }

? ? ? ? }

? ? ? ? SortUtil.swap(data,i,lowIndex);

? ? }

? }

}

Shell排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class ShellSort implements SortUtil.Sort{

?? public void sort(int[] data) {

? ? for(int i=data.length/2;i>2;i/=2){

? ? ? ? for(int j=0;j<i;j++){

? ? ? ? ? insertSort(data,j,i);

? ? ? ? }

? ? }

? ? insertSort(data,0,1);

? }

? private void insertSort(int[] data, int start, int inc) {

? ? int temp;

? ? for(int i=start+inc;i<data.length;i+=inc){

????? for(int j=i;(j>=inc)&&(data[j]<data[j-inc]);j-=inc){

? ? ? ? ? SortUtil.swap(data,j,j-inc);

? ? ? ? }

? ? }

? }

}

快速排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class QuickSort implements SortUtil.Sort{

? public void sort(int[] data) {

? ? quickSort(data,0,data.length-1); ? ?

? }

? private void quickSort(int[] data,int i,int j){

? ? int pivotIndex=(i+j)/2;

? ? //swap

? ? SortUtil.swap(data,pivotIndex,j);

? ? int k=partition(data,i-1,j,data[j]);

? ? SortUtil.swap(data,k,j);

? ? if((k-i)>1) quickSort(data,i,k-1);

? ? if((j-k)>1) quickSort(data,k+1,j);

? }

? private int partition(int[] data, int l, int r,int pivot) {

? ? do{

? ? ? while(data[++l]<pivot);

? ? ? while((r!=0)&&data[--r]>pivot);

? ? ? SortUtil.swap(data,l,r);

? ? }

? ? while(l<r);

? ? SortUtil.swap(data,l,r); ? ?

? ? return l;

? }

}

改進后的快速排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class ImprovedQuickSort implements SortUtil.Sort {

? private static int MAX_STACK_SIZE=4096;

? private static int THRESHOLD=10;

? public void sort(int[] data) {

? ? int[] stack=new int[MAX_STACK_SIZE];

? ? int top=-1;

? ? int pivot;

? ? int pivotIndex,l,r;

? ? stack[++top]=0;

? ? stack[++top]=data.length-1;

? ? while(top>0){

? ? ? ? int j=stack[top--];

? ? ? ? int i=stack[top--];

? ? ? ? pivotIndex=(i+j)/2;

? ? ? ? pivot=data[pivotIndex];

? ? ? ? SortUtil.swap(data,pivotIndex,j);

? ? ? ? //partition

? ? ? ? l=i-1;

? ? ? ? r=j;

? ? ? ? do{

? ? ? ? ? while(data[++l]<pivot);

? ? ? ? ? while((r!=0)&&(data[--r]>pivot));

? ? ? ? ? SortUtil.swap(data,l,r);

? ? ? ? }

? ? ? ? while(l<r);

? ? ? ? SortUtil.swap(data,l,r);

? ? ? ? SortUtil.swap(data,l,j);

? ? ? ? if((l-i)>THRESHOLD){

? ? ? ? ? stack[++top]=i;

? ? ? ? ? stack[++top]=l-1;

? ? ? ? }

? ? ? ? if((j-l)>THRESHOLD){

? ? ? ? ? stack[++top]=l+1;

? ? ? ? ? stack[++top]=j;

? ? ? ? }

? ?? ? }

? ? //new InsertSort().sort(data);

? ? insertSort(data);

? }

?? private void insertSort(int[] data) {

? ? int temp;

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

? ? ? ? for(int j=i;(j>0)&&(data[j]<data[j-1]);j--){

? ? ? ? ? SortUtil.swap(data,j,j-1);

? ? ? ? }

? ? } ? ?

? }

}

歸并排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class MergeSort implements SortUtil.Sort{

? public void sort(int[] data) {

? ? int[] temp=new int[data.length];

? ? mergeSort(data,temp,0,data.length-1);

? }

?

? private void mergeSort(int[] data,int[] temp,int l,int r){

? ? int mid=(l+r)/2;

? ? if(l==r) return ;

? ? mergeSort(data,temp,l,mid);

? ? mergeSort(data,temp,mid+1,r);

? ? for(int i=l;i<=r;i++){

? ? ? ? temp=data;

? ? }

? ? int i1=l;

? ? int i2=mid+1;

? ? for(int cur=l;cur<=r;cur++){

? ? ? ? if(i1==mid+1)

? ? ? ? ? data[cur]=temp[i2++];

? ? ? ? else if(i2>r)

? ? ? ? ? data[cur]=temp[i1++];

? ? ? ? else if(temp[i1]<temp[i2])

? ? ? ? ? data[cur]=temp[i1++];

? ? ? ? else

? ? ? ? ? data[cur]=temp[i2++]; ? ? ? ?

? ? }

? }

}

改進后的歸并排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class ImprovedMergeSort implements SortUtil.Sort {

? private static final int THRESHOLD = 10;

? public void sort(int[] data) {

? ? int[] temp=new int[data.length];

? ? mergeSort(data,temp,0,data.length-1);

? }

?private void mergeSort(int[] data, int[] temp, int l, int r) {

? ? int i, j, k;

? ? int mid = (l + r) / 2;

? ? if (l == r)

? ? ? ? return;

? ? if ((mid - l) >= THRESHOLD)

? ? ? ? mergeSort(data, temp, l, mid);

? ? else

? ? ? ? insertSort(data, l, mid - l + 1);

? ? if ((r - mid) > THRESHOLD)

? ? ? ? mergeSort(data, temp, mid + 1, r);

? ? else

? ? ? ? insertSort(data, mid + 1, r - mid);

? ? for (i = l; i <= mid; i++) {

? ? ? ? temp = data;

? ? }

? ? for (j = 1; j <= r - mid; j++) {

? ? ? ? temp[r - j + 1] = data[j + mid];

? ? }

? ? int a = temp[l];

? ? int b = temp[r];

? ? for (i = l, j = r, k = l; k <= r; k++) {

? ? ? ? if (a < b) {

? ? ? ? ? data[k] = temp[i++];

? ? ? ? ? a = temp;

? ? ? ? } else {

? ? ? ? ? data[k] = temp[j--];

? ? ? ? ? b = temp[j];

? ? ? ? }

? ? }

? }

? private void insertSort(int[] data, int start, int len) {

? ? for(int i=start+1;i<start+len;i++){

? ? ? ? for(int j=i;(j>start) && data[j]<data[j-1];j--){

? ? ? ? ? SortUtil.swap(data,j,j-1);

? ? ? ? }

? ? }

? }

}

堆排序:

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

public class HeapSort implements SortUtil.Sort{

? public void sort(int[] data) {

? ? MaxHeap h=new MaxHeap();

? ? h.init(data);

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

? ? ? ? h.remove();

? ? System.arraycopy(h.queue,1,data,0,data.length);

? }

? private static class MaxHeap{

? ? void init(int[] data){

? ? ? ? this.queue=new int[data.length+1];

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

? ? ? ? ? queue[++size]=data;

? ? ? ? ? fixUp(size);

? ? ? ? }

? ? }

? ? ?

? ? private int size=0;

? ? private int[] queue;

? ? ? ? ?

? ? public int get() {

? ? ? ? return queue[1];

? ? }

? ? public void remove() {

? ? ? ? SortUtil.swap(queue,1,size--);

? ? ? ? fixDown(1);

? ? }

? ? //fixdown

? ? private void fixDown(int k) {

? ? ? ? int j;

? ? ? ? while ((j = k << 1) <= size) {

? ? ? ? ? if (j < size && queue[j]<queue[j+1])

? ? ? ? ? ? j++;

? ? ? ? ? if (queue[k]>queue[j]) //不用交換

? ? ? ? ? ? break;

? ? ? ? ? SortUtil.swap(queue,j,k);

? ? ? ? ? k = j;

? ? ? ? }

? ? }

? ? private void fixUp(int k) {

? ? ? ? while (k > 1) {

? ? ? ? ? int j = k >> 1;

? ? ? ? ? if (queue[j]>queue[k])

? ? ? ? ? ? break;

? ? ? ? ? SortUtil.swap(queue,j,k);

? ? ? ? ? k = j;

? ? ? ? }

? ? }

? }

}

SortUtil:

package org.rut.util.algorithm;

import org.rut.util.algorithm.support.BubbleSort;

import org.rut.util.algorithm.support.HeapSort;

import org.rut.util.algorithm.support.ImprovedMergeSort;

import org.rut.util.algorithm.support.ImprovedQuickSort;

import org.rut.util.algorithm.support.InsertSort;

import org.rut.util.algorithm.support.MergeSort;

import org.rut.util.algorithm.support.QuickSort;

import org.rut.util.algorithm.support.SelectionSort;

import org.rut.util.algorithm.support.ShellSort;

public class SortUtil {

? public final static int INSERT = 1;

? public final static int BUBBLE = 2;

? public final static int SELECTION = 3;

? public final static int SHELL = 4;

? public final static int QUICK = 5;

? public final static int IMPROVED_QUICK = 6;

? public final static int MERGE = 7;

? public final static int IMPROVED_MERGE = 8;

? public final static int HEAP = 9;

? public static void sort(int[] data) {

? ? sort(data, IMPROVED_QUICK);

? }

? private static String[] name={

? ? ? ? "insert","bubble","selection","shell","quick","improved_quick","merge","improved_merge","heap"

? };

?

? private static Sort[] impl=new Sort[]{

? ? ? ? new InsertSort(),

? ? ? ? new BubbleSort(),

? ? ? ? new SelectionSort(),

? ? ? ? new ShellSort(),

? ? ? ? new QuickSort(),

? ? ? ? new ImprovedQuickSort(),

? ? ? ? new MergeSort(),

? ? ? ? new ImprovedMergeSort(),

? ? ? ? new HeapSort()

? };

? public static String toString(int algorithm){

? ? return name[algorithm-1];

? }

?

? public static void sort(int[] data, int algorithm) {

? ? impl[algorithm-1].sort(data);

? }

? public static interface Sort {

? ? public void sort(int[] data);

? }

? public static void swap(int[] data, int i, int j) {

? ? int temp = data;

? ? data = data[j];

? ? data[j] = temp;

? }

}

轉載于:https://www.cnblogs.com/alaricblog/p/3278287.html

總結

以上是生活随笔為你收集整理的Java实现各种排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av伊人久久| 久久久久久黄色 | 国产91传媒 | 欧美中文字幕一区二区三区 | 麻豆精品免费视频 | 性感美女被草 | 色视频网 | 精品无码人妻一区二区三 | 日本打白嫩屁股视频 | 亚洲无吗一区二区三区 | 激情欧美一区二区三区 | 免费看日韩av| 老熟妇高潮一区二区高清视频 | 美女免费黄色 | 91久久超碰 | 成人av在线电影 | 成人av影视在线 | 天天天色综合 | 免费在线看视频 | 一区二区三区在线看 | 国产午夜福利一区二区 | 91福利视频导航 | 成人伊人网 | 在线观看 中文字幕 | 三级欧美韩日大片在线看 | 亚洲六月丁香色婷婷综合久久 | 久久久国产精品黄毛片 | 亚洲一区免费在线 | 久久伊人在 | 91丨porny丨中文 | 综合激情网五月 | 国产精品久久综合视频 | 美国av导航 | 日本成人精品在线 | 欧美成人片在线观看 | 国产乱码久久久久久 | 超碰在线一区 | 国产黄色免费 | 天堂а√在线中文在线 | 97超视频在线观看 | 一区二区三区四区五区视频 | 琪琪射| 老熟妇高潮一区二区高清视频 | 亚洲29p| 男人肌肌桶女人肌肌 | 五月天色视频 | 日韩人妻精品中文字幕 | 91这里只有精品 | 日韩成人av在线 | 国产精品二区视频 | 久久中文字幕高清 | 国产夫妻自拍小视频 | 亚洲日本免费 | www.youjizz.com在线 | 日韩专区第一页 | 女人毛片视频 | www.97av| 国产三级久久 | 91久久精品日日躁夜夜躁国产 | 激情二区 | 日日夜夜天天操 | 久久9热| 风流还珠之乱淫h文 | 国产成人精品123区免费视频 | 中文日韩字幕 | 一个综合色 | 午夜av剧场 | 一区二区一级片 | 欧美乱人伦 | 大地资源在线观看免费高清版粤语 | 成人精品 | 风流少妇按摩来高潮 | 免费黄色av网站 | 久久久极品 | 欧美特级黄色大片 | 久久99精品国产.久久久久 | 中国美女囗交视频 | 日韩av在线播放一区 | 色婷婷婷婷色 | 亚洲性一区| 大桥未久视频在线观看 | 久久99精品久久久久久园产越南 | 成人性色生活片 | 噼里啪啦免费看 | 蜜臀在线一区二区三区 | 91视频免费在线观看 | 99爱爱视频 | 不卡网av| 日本特级黄色录像 | 69久人妻无码精品一区 | a人片| 福利在线小视频 | 亚洲欧美一区在线 | 日韩jizz| 国产欧美视频在线 | 国产精品成人aaaa在线 | 久草视频精品在线 | h片免费在线观看 | 久久久久久久影院 |