各种排序算法的实现Java

 public class sort {
 /**
  * @param args
  */
 public static void main(String[] args) {
  int[] data = {8,4,9,2,1,6,3,7,5};
  for (int i = 0; i < data.length; i++) {
   System.out.print(data[i]+" ");
  }
  System.out.println();
  sort s = new sort();
  //s.sort4(data,0,data.length-1);
  s.sort5(data,0,data.length-1);
  for (int i = 0; i < data.length; i++) {
   System.out.print(data[i]+" ");
  }
 }
 
 /*
  * 冒泡排序:
 依次比较相邻的两个元素,通过一次比较把未排序序列中最大(或最小)的元素放置在未排序序列的末尾
  */
 public void sort1(int[] data){
  for (int i = 0; i < data.length -1; i++) {  
            for (int j = 0; j < data.length - i - 1; j++) {  
                if (data[j] > data[j + 1]) {  //把大的往后排
                    int temp = data[j];  
                    data[j] = data[j + 1];  
                    data[j + 1] = temp;  
                }  
            }  
        }  
 }
 /*
  * 选择排序:
  每一次从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
  */
 public void sort2(int data[]) {  
        int minVal;  
        int minIndex;  
        for (int i = 0; i < data.length - 1; i++) {  
            minVal = data[i];  
            minIndex = i;  
            //选择最小的元素以及最小的下标
            for (int j = i + 1; j < data.length; j++) {  
                if (data[j] < minVal) {  
                    minVal = data[j];  
                    minIndex = j;  
                }  
            }  
            //找到的那个最小元素
            if (minVal != data[i] && minIndex != i) {  
                data[minIndex] = data[i];  
                data[i] = minVal;  
            }  
        }  
  
    }  
 
 /*
  * 插入排序:
 将数列分为有序和无序两个部分,每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
  */
 public void sort3(int data[]) {  
        for (int i = 1; i < data.length; i++) {  
            for (int j = i; j > 0; j--) {  
                if (data[j] < data[j - 1]) {  
                    int temp = data[j];  
                    data[j] = data[j - 1];  
                    data[j - 1] = temp;  
                }  
            }  
        }  
    }  
 
 /*
  * 归并排序:
  将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。排序过程如下:
  (1)申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  (2)设定两个指针,最初位置分别为两个已经排序序列的起始位置
  (3)比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  (4)重复步骤3直到某一指针达到序列尾
  (5)将另一序列剩下的所有元素直接复制到合并序列尾
  */
  public void sort4(int data[], int start, int end) {  
         if (start < end) {  
             int mid = (start + end) / 2;  
             sort4(data, start, mid);  
             sort4(data, mid + 1, end);  
             merge(data, start, mid, end);  
         }  
     }  
   
     public static void merge(int data[], int start, int mid, int end) {  
         int temp[] = new int[end - start + 1];  
         int i = start;  
         int j = mid + 1;  
         int k = 0;  
         while (i <= mid && j <= end) {  
             if (data[i] < data[j]) {  
                 temp[k++] = data[i++];  
             } else {  
                 temp[k++] = data[j++];  
             }  
         }  
   
         while (i <= mid) {  
             temp[k++] = data[i++];  
         }  
         while (j <= end) {  
             temp[k++] = data[j++];  
         }  
   
         for (k = 0, i = start; k < temp.length; k++, i++) {  
             data[i] = temp[k];  
         }  
     }  
     
     /*
      * 快速排序:
    通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都小,
    然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
      */
     public  void sort5(int data[], int start, int end) {  
         if (end - start <= 0) {  
             return;  
         }  
         int last = start;  
         for (int i = start + 1; i <= end; i++) {  
             if (data[i] < data[start]) {  
                 int temp = data[++last];  
                 data[last] = data[i];  
                 data[i] = temp;  
             }  
         }  
         int temp = data[last];  
         data[last] = data[start];  
         data[start] = temp;  
         sort5(data, start, last - 1);  
         sort5(data, last + 1, end);  
     }  
}
时间: 2025-01-04 14:54:19

各种排序算法的实现Java的相关文章

探讨排序算法的实现

排序算法是我们工作中使用最普遍的算法,常见的语言库中基本都会有排序算法的实现,比如c标准库的qsort,stl的sort函数等.本文首先介绍直接插入排序,归并排序,堆排序,快速排序和基数排序等比较排序算法,然后介绍计数排序,基数排序等具有线性时间的排序算法.本文主要讨论算法的实现方法,并不会过多介绍基本理论. 评价一个排序算法优劣适用与否,一般需要从三个方面来分析 时间复杂度.用比较操作和移动操作数的最高次项表示,由于在实际应用中最在乎的是运行时间的上限,所以一般取输入最坏情况的下的运行时间作为

Python 排序算法的实现

冒泡排序: 1 def bubble(l): 2 length = len(l) 3 for i in range(length): 4 for j in range(i+1, length): 5 if l[i] > l[j]: 6 l[i], l[j] = l[j], l[i] 7 print l 选择排序: 1 def select(l): 2 length = len(l) 3 for i in range(length): 4 minn = i 5 for j in range(i+1

Python学习(三) 八大排序算法的实现(下)

本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过一趟排序将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整个排序过程能够递归进行,以此达到整个数据变成有序序列. 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全

七种排序算法的实现和总结

最近把七种排序算法集中在一起写了一遍. 注释里有比较详细的说明. 1 /*排序算法大集合**/ 2 #include <stdio.h> 3 #include <string.h> 4 #include <stdlib.h> 5 6 //------------------快速排序------------------// 7 /* 8 核心: 9 如果你知道多少人该站你前面,多少人站你后面,你一定知道你该站哪个位置. 10 算法: 11 1.选取分界数,参考这个分界数,

软考笔记第六天之各排序算法的实现

对于前面的排序算法,用c#来实现 直接插入排序: 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序.第一趟比较前两个数,然后把第二个数按大小插入到有序表中: 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中:依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程.直接插入排序属于稳定的排序,最坏时间复杂性为O(n^2),空间复杂度为O(1).直接插入排序是由两层嵌套循环组成的.外层循环标识并决定待比较的数值.内层循环为待比较数值确定其最终位

常见排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)

这篇博客主要实现一些常见的排序算法.例如: //冒泡排序 //选择排序 //简单插入排序 //折半插入排序 //希尔排序 //归并排序 //双向的快速排序 //单向的快速排序 //堆排序 对于各个算法的实现原理,这里不再多说了,代码中注释较多,结合注释应该都能理解算法的原理,读者也可自己google一下.另外,注释中有很多点,比如边界条件.应用场景等已经用 * 标记,* 越多,越应该多注意. 下面是实现: //冒泡排序 void BubbleSort(int *arr, int n) { if(

几种基础排序算法的实现(Java C++)

最近在复习数据结构/算法,准备把以前的基础知识都实现一边,过一过.也写写我人生中的第一篇技术博文-只求自己能把学过的东西梳理一便,加深记忆. 一.插入排序. 设计思想:从数组的第二个元素开始循环,并将此元素设为key(通俗的理解就是数组中正在为它排序的元素),再把此元素与之前的所有已经排好序的元素进行比较,找到合适的位置后,继续循环,直到数组中的最后一个元素为止. (C++) 1 void insertSort(int *array, int length) { 2 for (int i = 1

排序算法的实现(归并,快排,堆排,希尔排序 O(N*log(N)))

今天跟着左老师的视频,理解了四种复杂度为 O(N*log(N))的排序算法,以前也理解过过程,今天根据实际的代码,感觉基本的算法还是很简单的,只是自己写的时候可能一些边界条件,循环控制条件把握不好. //对于一个int数组,请编写一个选择冒泡算法,对数组元素排序. //给定一个int数组A及数组的大小n,请返回排序后的数组. //测试样例: //[1, 2, 3, 5, 2, 3], 6 //[1, 2, 2, 3, 3, 5] #include <iostream> using namesp

基本排序算法的实现

1 package com.dongbin.sort; 2 3 import java.util.Arrays; 4 5 /** 6 * 排序 7 * @author dongbin 8 * 9 */ 10 public class AllSort { 11 12 public static void main(String[] args) { 13 int[] arr = {1,32,43,11,23,45}; 14 MergeSort(arr); 15 System.out.println(