八大排序算法_java版

import java.util.Scanner;
/*直接插入排序:依次为每个元素找在以排好序列的位置
 *稳定排序(相同元素在排序过程保持之间前后位置不变。)

*期望复杂度:O(n2)
 */

public class InsertSort {
    
    public static void main(String[] args) {
        //控制台读入字符串,以逗号分隔 (1,2,3,4)
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        //分隔成单个字符
        String[] strs = str.split(",");
        //进入循环,确定每个数字位置
        for (int i = 1; i<strs.length; i++) {

int j = i-1;
            String temp = strs[i];
            //依次与之前的数字比较,如果小于前面的数字,则前面数字后移,直到确定位置或者j==0
            while (j>=0 && Integer.parseInt(strs[j]) > Integer.parseInt(temp)) {
                
                strs[j+1] = strs[j];
                j--;
            }
            
            strs[j+1] = temp;
        }
        //输出排序结果
        for (String string : strs) {
            System.out.println(string);
        }
    }
}

import java.util.Scanner;
/*希尔排序:把记录按下标的一定分量分组,然后两两比较,交换先后位置
 *不稳定排序(即相同的数字在排序后会改变位置 排序前a1....a3|排序后a3...a1 a1=a3)
 *时间复杂度:O(nlog2n)
*/
public class ShellSort {

public static void main(String[] args) {
        //读入字符串并分隔成字符数组(1,2,3,4)
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        String[] strs = str.split(",");
        
        double d = strs.length;
        
        while (true) {
            //按d/2取地板进行分组
            d = Math.ceil(d/2);
            int d1 = (int)d;
            //按组数进入循环
            for (int i = 0; i < d1; i++) {
                //每组从最前两个开始依次比较,交换位置
                for ( int x = i+d1; x < strs.length; x += d1) {
                     int j = x - d1;
                     if (Integer.parseInt(strs[j]) > Integer.parseInt(strs[x])) {
                        
                         String temp = strs[j];
                         strs[j] = strs[x];
                         strs[x] = temp;
                        
                     }
                }
            }
            
            if (d1 == 1) {
                break;
            }
        }
        
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }
    }
}

/*冒泡排序
 *稳定排序
 *期望复杂度:O(n2)
 * */
public class BubbleSort {

public static void main(String[] args) {
         int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};  
         int temp=0;
         //用来判断是否发生位置交换,初始为true
         boolean judge = true;
         while(judge) {
            
             judge = false;
             for (int i=0; i<a.length-1; i++){
                 if (a[i] > a[i+1]) {
                     temp = a[i];
                     a[i] = a[i+1];
                     a[i+1] = temp;
                     //发生位置交换后为true,继续循环比较
                     judge = true;
                 }
             }
         }
        
         for (int i=0; i<a.length; i++) {
             System.out.println(a[i]);
         }
    }
}

时间: 2024-10-16 20:41:21

八大排序算法_java版的相关文章

算法基础——经典八大排序算法的Java及Python实现

概述 八大排序算法不用多说了,程序员算法基础必须要掌握的,现在总结一下加深记忆.下图是这八大排序算法的分类.名称.时间空间复杂度,以及稳定性. 代码 以下是经典八大排序算法的Java及Python代码,都是基于经典算法书籍<算法导论>里的伪代码实现的,我在关键语句部分附上了注释. 按照上图中的顺序分别介绍八大排序算法的实现(升序),前面是Java,后面是Python.Java的排序函数写在了一个类里,Python的排序函数则直接写出来了. 直接插入排序 public class InsertS

Java实现八大排序算法

本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排序算法,他们之间关系如下: 稳定与非稳定: 如果一个排序算法能够保留数组中重复元素的相对位置则可以被称为是 稳定 的.反之,则是 非稳定 的. 直接插入排序 基本思想 通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置.在计算机的实现中,为了要给插入的元素腾出空间,我

谈谈八大排序算法问题

排序算法可以说是算法的入门以及算法学习阶段的基石,排序算法显得那么的基础又是非常重要的一种算法.排序算法常常作为一些高阶算法的数据处理中间过程在实际的问题处理中被应用的最为广泛,因此算法选将阶段就从八大排序算法开始.在本节内容中既可以看到一般性的比如插入排序,冒泡排序等基础算法又可以看到比如基数排序,位图排序,快速排序等等比较难理解的算法,算法之门从排序算法说起. 1.插入排序 插入排序算法的原理很简单,默认A中有一部分数据已经排好序了,后续只要从没有排好序的序列里面每拿出一个数字就在排好序的序

八大排序算法源码 + 耗时长度比较(看到好东西转下)

八大排序算法的排序时间长度的比较,测试数据10000000时部分结果如下 输入测试数据长度: 10000000数据初始化中...数据初始化完成!        堆排序用时:    8秒 499毫秒      快速排序用时:   22秒  35毫秒      归并排序用时:   34秒 473毫秒 另外五种排序本人并未等待结果,读者可自行测试 测试时请注意内存消耗,以免数据太大,内存不够,可自行测试单一算法以便增加可测试数据数目 #include <iostream> #include <

数据结构与算法之——八大排序算法

附:关于这个主题,网上好的文章已经数不胜数,本篇是整合后的文章. 正文: 一.概述 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 本文所指八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 二.排序算法详述 1.

[Data Structure] 八大排序算法

排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序算法体系结构图: 1. 直接插入排序(Straight Insertion Sort ) 基本思想:将待排序的无序数列看成是一个仅含有一个元素的有序数列和一个无序数列,将无序数列中的元素逐次插入到有序数列中,从而获得最终的有序数列. 算法流程: 1)初始时, a[0]自成一个有序区, 无序区为a[1

(转)详解八大排序算法

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到

排序算法(九)——八大排序算法总结

八大排序算法的稳定性及复杂度总结如下: 选择排序算法准则 每种排序算法都各有优缺点.因此,在实用时需根据不同情况适当选用,甚至可以将多种方法结合起来使用. 影响排序的因素有很多,平均时间复杂度低的算法并不一定就是最优的.相反,有时平均时间复杂度高的算法可能更适合某些特殊情况.同时,选择算法时还得考虑它的可读性,以利于软件的维护.一般而言,需要考虑的因素有以下四点: 1.待排序的记录数目n的大小: 2.记录本身数据量的大小,也就是记录中除关键字外的其他信息量的大小: 3.关键字的结构及其分布情况:

八大排序算法学习笔记:冒泡排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 算法原理: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有