当前位置: 首页 > news >正文

内部排序一

  闲来无事,复习下数据结构的常用内部排序,利用下午的时间,随便写了选择、快速排序、内部排序的实现,虽然常用数据结构算法原理还是挺简单,可以完成写出来还是费了一些工夫。此处贴出代码,仅作自己的随手联系之用。

      

public class Program {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
          
           int[] array = CreateRandomArray(20);
           Display(array);
           SelectSortClass.Sort(array);
           Display(array);
           QuickSortClass.Sort(array);
           Display(array);
           HeapSortClass.Sort(array);
           Display(array);
    }
    
    
    private static int[] CreateRandomArray(int n)
    {
        int[] array = new int[n];
        Random rnd = new Random();
        for(int i = 0;i<n;i++)
        {
            array[i] = rnd.nextInt(n*10);
        }
        return array;
    }
    
    private static void Display(int[] array)
    {
        for(int i =0;i<array.length;i++)
        {
            System.out.print(array[i] + "  ");
        }
        System.out.println();
        
    }
    
}

选择排序的实现如下:

public class SelectSortClass
{
       public static void Sort(int[] array)
    {
        for(int i = 0;i < array.length;i++)
        {
            int minIndex = i;
            for(int j = i +1;j<array.length;j++)
            {
                 if(array[minIndex] > array[j])
                       minIndex = j ;
            }
            if(minIndex != i)
            Swap(array,minIndex,i);
        }
    }

    private static void Swap(int[] array,int m,int n)
    {
         int temp = array[m];
         array[m] = array[n];
         array[n] = temp;
    }

}

快速排序的实现如下:

public class QuickSortClass 
{

    /**
     * 快速排序
     * @param array
     * @param left
     * @param right
     */
    public static void Sort(int[] array)
    {
        QuickSort(array,0,array.length -1);
    }
    
    private static void QuickSort(int[] array,int left,int right)
    {
        if(left<right)
        {
            int partion = Division(array,left,right);
            QuickSort(array,left,partion-1);
            QuickSort(array,partion +1 ,right);
        }
        
    }
    
    private static int Division(int[] array,int left,int right)
    {
        int temp = array[left];
        while(left < right)
        {
            while(left < right && temp <= array[right])
                right--;
            array[left] = array[right];
            while(left < right && temp >= array[left])
                left++;
            array[right] = array[left];
        }
        array[left] = temp;
        return left;
    }
}

堆排序的实现如下:

public class HeapSortClass {

    /**
     * 堆排序
     * @param array
     */
    public static void Sort(int[] array)
    {
        BuildMaxHeap(array); //产生大顶堆
        for(int i = array.length - 1;i>=0;i--)
        {
            Swap(array,0,i);//交换大顶堆的元素,到数组最后一个
            MaxHeapUpdate(array,0,i);//前i个元素产生大顶堆
        }
    }
    
    private static void BuildMaxHeap(int[] array)
    {
           for(int i = (array.length / 2) -1; i >= 0; i--)
           {
               MaxHeapUpdate(array,i,array.length);
           }
    }
    
    private static void MaxHeapUpdate(int[] array ,int i,int heapSize)
    {
        int left = i* 2;
        int right = i* 2 +1;
        int max = i;
        if(right < heapSize)
        {
             if(array[left] >= array[right])
             {
                 if(array[left] > array[i])
                     max = left;
             }
             else
             {
                 if(array[right] > array[i])
                     max = right;
             }
        }
        if(max != i)
        {
            Swap(array,max,i);
            MaxHeapUpdate(array,max,heapSize);
        }
    }
    
    private static void Swap(int[] array,int m,int n)
    {
         int temp = array[m];
         array[m] = array[n];
         array[n] = temp;
    }
    
}

 

转载于:https://www.cnblogs.com/Johnnie/p/3870288.html

相关文章:

  • 架构设计:前后端分离之Web前端架构设计
  • 在Struts2中集成Spring详细讲解
  • 如何提取浮点数的整数以及小数部分
  • 如何把PDF转成Excel
  • Android Audio System 之一:AudioTrack如何与AudioFlinger
  • Windows phone 8 学习笔记(1) 触控输入(转)
  • MongoDB权威指南学习笔记4---查询相关的知识点
  • Unity3d热更新全书-加载(一)从AssetBundle说起
  • JVM -XX: 参数介绍
  • 代码的坏味道之五 ——译自《重构》
  • 【转载】跨语言通信方案比较
  • 【WP 8.1开发】自定义(RAW)通知的使用
  • java 递归函数
  • jQuery Validation Engine 表单验证
  • GLES Shader Language 易错集锦
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CSS3 变换
  • magento 货币换算
  • npx命令介绍
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Spring框架之我见(三)——IOC、AOP
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 简单数学运算程序(不定期更新)
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 区块链技术特点之去中心化特性
  • 探索 JS 中的模块化
  • 我与Jetbrains的这些年
  • 一些css基础学习笔记
  • # 透过事物看本质的能力怎么培养?
  • #if 1...#endif
  • (07)Hive——窗口函数详解
  • (分布式缓存)Redis持久化
  • (附源码)php新闻发布平台 毕业设计 141646
  • (强烈推荐)移动端音视频从零到上手(上)
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转) Android中ViewStub组件使用
  • (转)nsfocus-绿盟科技笔试题目
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET 服务 ServiceController
  • .Net 高效开发之不可错过的实用工具
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @EventListener注解使用说明
  • @RequestBody与@ResponseBody的使用
  • @RequestMapping 的作用是什么?
  • []T 还是 []*T, 这是一个问题
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [ABC294Ex] K-Coloring
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [CISCN 2019华东南]Web11
  • [EFI]DELL XPS13 9360电脑 Hackintosh 黑苹果efi引导文件