排序算法的复杂度、稳定性与代码实现
发布日期:2021-06-27 04:25:03
浏览次数:5
分类:技术文章
本文共 4070 字,大约阅读时间需要 13 分钟。
算法复杂度与稳定性
相应Code
package SortTest;import java.util.Arrays;import java.util.PriorityQueue;public class SortTest { static PriorityQueuemaxQueue; static PriorityQueue minQueue; public static void main(String[] args) { int[] nums = { 1,3,2,9,6,5,3,2}; int N = nums.length; //直接插入排序 int[] InsertNums = new int[N]; System.arraycopy(nums, 0, InsertNums, 0, N); InsertSort(InsertNums, N); System.out.print("直接插入排序之前:" + Arrays.toString(nums)); System.out.println("直接插入排序结果:" + Arrays.toString(InsertNums)); //希尔排序 int[] ShellNums = new int[N]; System.arraycopy(nums,0,ShellNums,0,N); ShellSort(ShellNums,N); System.out.print("希尔排序之前:" + Arrays.toString(nums)); System.out.println("希尔排序结果:" + Arrays.toString(ShellNums)); //冒泡排序 int[] BubbleNums = new int[N]; System.arraycopy(nums,0,BubbleNums,0,N); BubbleSort(BubbleNums, N); System.out.print("冒泡排序之前:" + Arrays.toString(nums)); System.out.println("冒泡排序结果:" + Arrays.toString(BubbleNums)); //快速排序 int[] QuickNums = new int[N]; System.arraycopy(nums, 0, QuickNums, 0, N); QuickSort(QuickNums, 0, N-1); System.out.print("快速排序之前:" + Arrays.toString(nums)); System.out.println("快速排序结果:" + Arrays.toString(QuickNums)); //归并排序 int[] MergeNums = new int[N]; System.arraycopy(nums, 0, MergeNums, 0, N); int[] temp = new int[N]; MergeSort(MergeNums, 0, N-1, temp); System.out.print("归并排序之前:" + Arrays.toString(nums)); System.out.println("归并排序结果:" + Arrays.toString(MergeNums)); //直接选择排序 int[] SelectNums = new int[N]; System.arraycopy(nums, 0, SelectNums, 0, N); SelectSort(SelectNums, N); System.out.print("直接选择排序之前:" + Arrays.toString(nums)); System.out.println("直接选择排序结果:" + Arrays.toString(MergeNums)); //堆排序 int[] HeapNums = new int[N]; System.arraycopy(nums, 0, HeapNums, 0, N); HeapSort(HeapNums, N); System.out.print("堆排序之前:" + Arrays.toString(nums)); System.out.println("堆排序结果:" + maxQueue); } public static void InsertSort(int[] InsertNums,int N) { int i,j,k; for(i=1;i =0;j--) { if(InsertNums[j] <= InsertNums[i]) break; } if(j != i-1) { int temp = InsertNums[i]; for(k=i-1;k>j;k--) { InsertNums[k+1] = InsertNums[k]; } InsertNums[k+1] = temp; } } } public static void ShellSort(int[] ShellNums,int N) { int gap = N / 2,i,j; while(gap > 0) { for(i=gap;i =0;j-=gap) { if(ShellNums[j+gap] < ShellNums[j]) { int temp = ShellNums[j+gap]; ShellNums[j+gap] = ShellNums[j]; ShellNums[j] = temp; } } } gap /= 2; } } public static void BubbleSort(int[] BubbleNums,int N) { int i,j; for(i=0;i BubbleNums[j]) { int temp = BubbleNums[j]; BubbleNums[j] = BubbleNums[j-1]; BubbleNums[j-1] = temp; } } } } public static void QuickSort(int[] QuickNums,int start,int end) { if(start > end) return; int ken = QuickNums[start]; int i=start,j=end; while(i < j) { while(i < j && QuickNums[j] > ken) { j--; } if(i < j) { QuickNums[i] = QuickNums[j]; i++; } while(i < j && QuickNums[i] < ken) { i++; } if(i < j) { QuickNums[j] = QuickNums[i]; j--; } } QuickNums[i] = ken; QuickSort(QuickNums, start, i-1); QuickSort(QuickNums, i+1, end); } public static void MergeSort(int[] MergeNums,int start,int end,int [] temp) { if(start < end) { int mid = start + (end - start) / 2; MergeSort(MergeNums, start, mid, temp); MergeSort(MergeNums, mid+1, end, temp); MergeArray(MergeNums, start, mid, mid+1, end, temp); } } public static void MergeArray(int[] MergeNums,int left,int leftEnd,int right,int rightEnd,int[] temp) { int i = left,j = right; int k = 0; while(i <= leftEnd && j <= rightEnd) { if(MergeNums[i] <= MergeNums[j]) { temp[k++] = MergeNums[i++]; }else { temp[k++] = MergeNums[j++]; } } while(i <= leftEnd) temp[k++] = MergeNums[i++]; while(j <= rightEnd) temp[k++] = MergeNums[j++]; for(int m=0;m ();// for(int i=0;i ((a,b)->(b-a)); for(int i=0;i
转载地址:https://blog.csdn.net/weixin_42166320/article/details/107364542 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月22日 07时16分06秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
babylonjs 设置面板位置_babylonjs 空间坐标转为屏幕坐标
2019-04-21
oracle 查询中用case,oracle case when 在查询时候的用法。
2019-04-21
oracle正在运行的程序包,ORACLE PL/SQL编程详解之程序包的创建与应用
2019-04-21
php局部页面滚动,在访问另一页面后保留浏览器滚动位置 - php
2019-04-21
linux服务器怎么添加站点,如何增加站点或虚拟主机及文件说明
2019-04-21
linux系统输入指令,Linux系统基础 - 基本操作命令
2019-04-21
linux设备管理命令,Linux命令(设备管理).doc
2019-04-21
linux 中文utf-8转gbk编码,Linux平台下 GBK编码转UTF-8编码
2019-04-21
linux安装软件在boot,在Linux系统上安装Spring boot应用的教程详解
2019-04-21
取消linux自动登录,linuxdeepin 如何取消自动登录啊?
2019-04-21
linux线程存储,Linux系统编程手册:线程:线程安全和每线程存储
2019-04-21
c语言编程max,C语言编程题及答案.doc
2019-04-21
android增删改查布局,Android之父_增删改查
2019-04-21