8个排序算法——java

  1 public static void radixsort(int[] a){
  2         int max=a[0];
  3         for(int i=1;i<a.length;i++){
  4             if (max<a[i]) {
  5                 max=a[i];
  6             }
  7         }
  8         int time=0;
  9         while(max>0){
 10             max/=10;
 11             time++;
 12         }
 13         java.util.List<ArrayList> queue=new ArrayList<ArrayList>();
 14         for(int i=0;i<10;i++){
 15             ArrayList<Integer> queue1=new ArrayList<>();
 16             queue.add(queue1);
 17         }
 18         for(int i=0;i<time;i++){
 19             for(int j=0;j<a.length;j++){
 20                 int x=a[j]%(int)Math.pow(10, i+1)/(int)Math.pow(10, i);
 21                 queue.get(x).add(a[j]);
 22             }
 23             int tmp=0;
 24             for(int j=0;j<10;j++){
 25                 while(!queue.get(j).isEmpty()){
 26                     a[tmp++]=(int)queue.get(j).remove(0);
 27                 }
 28             }
 29         }
 30
 31         for (int i = 0; i < a.length; i++) {
 32             System.out.println("radixsort" + a[i]);
 33         }
 34     }
 35
 36     public static void mergesort(int[] a) {
 37         sort(a, 0, a.length-1);
 38         for (int i = 0; i < a.length; i++) {
 39             System.out.println("mergesort" + a[i]);
 40         }
 41     }
 42
 43     public static void merging(int[] a, int left, int middle, int right) {
 44         if (middle < left || middle > right) {
 45             return;
 46         }
 47         int[] tmpArray = new int[a.length];
 48         int tmp = left;
 49         int tmpIndex = left;
 50         int begin1 = left;
 51         int begin2 = middle+1;
 52         while (begin1 <= middle && begin2 <= right) {
 53             if (a[begin1] < a[begin2]) {
 54                 tmpArray[tmp++] = a[begin1++];
 55             } else {
 56                 tmpArray[tmp++] = a[begin2++];
 57             }
 58         }
 59         while (begin1 <= middle) {
 60             tmpArray[tmp++] = a[begin1++];
 61         }
 62         while (begin2 <= right) {
 63             tmpArray[tmp++] = a[begin2++];
 64         }
 65         while(tmpIndex<=right){
 66             a[tmpIndex]=tmpArray[tmpIndex++];
 67         }
 68     }
 69
 70     public static void sort(int[] a, int left, int right) {
 71         if (left < right) {
 72             int middle = (right - left) / 2 + left;
 73             sort(a, left, middle);
 74             sort(a, middle + 1, right);
 75             merging(a, left, middle, right);
 76         }
 77     }
 78
 79     public static void quicksort(int[] a) {
 80         System.out.println("quicksort");
 81         quick(a, 0, a.length - 1);
 82         for (int i = 0; i < a.length; i++) {
 83             System.out.println("quicksort" + a[i]);
 84         }
 85     }
 86
 87     public static void quick(int[] a, int left, int right) {
 88         if (left < right) {
 89             int middle = getMiddle(a, left, right);
 90             quick(a, left, middle);
 91             quick(a, middle + 1, right);
 92         }
 93     }
 94
 95     public static int getMiddle(int[] a, int left, int right) {
 96         int tmp = a[left];
 97         while (left < right) {
 98             while (a[right] >= tmp && right > left) {
 99                 right--;
100             }
101             a[left] = a[right];
102             while (a[left] <= tmp && left < right) {
103                 left++;
104             }
105             a[right] = a[left];
106         }
107         a[left] = tmp;
108         return left;
109     }
110
111     public static void bubblesort(int[] a) {
112         for (int i = 0; i < a.length; i++) {
113             for (int j = 0; j < a.length - i - 1; j++) {
114                 if (a[j] > a[j + 1]) {
115                     swap(a, j, j + 1);
116                 }
117             }
118         }
119         for (int i = 0; i < a.length; i++) {
120             System.out.println("bubblesort" + a[i]);
121         }
122     }
123
124     public static void heapsort(int[] a) {
125         for (int i = a.length - 1; i >= 0; i--) {
126             buildmaxheap(a, i);
127             swap(a, i, 0);
128
129         }
130         for (int i = 0; i < a.length; i++) {
131             System.out.println("heapsort" + a[i]);
132         }
133     }
134
135     public static void swap(int[] a, int i, int j) {
136         int temp = a[i];
137         a[i] = a[j];
138         a[j] = temp;
139     }
140
141     public static void buildmaxheap(int[] a, int lastindex) {
142         int length = a.length;
143         if (lastindex >= length) {
144             return;
145         }
146         int index = (lastindex - 1) / 2;
147         for (; index >= 0; index--) {
148             int left = index * 2 + 1;
149             if (left <= lastindex) {
150                 if (a[index] < a[left]) {
151                     swap(a, index, left);
152                 }
153             }
154             if (left < lastindex && a[index] < a[left + 1]) {
155                 swap(a, index, left + 1);
156             }
157         }
158     }
159
160     public static void selectsort(int[] a) {
161         int pos = 0;
162         for (int i = 0; i < a.length; i++) {
163             pos = i;
164             for (int j = i + 1; j < a.length; j++) {
165                 if (a[pos] > a[j]) {
166                     pos = j;
167                 }
168             }
169             if (pos != i) {
170                 int temp = a[i];
171                 a[i] = a[pos];
172                 a[pos] = temp;
173             }
174         }
175         for (int i = 0; i < a.length; i++) {
176             System.out.println("shellsort" + a[i]);
177         }
178     }
179
180     public static void shellsort(int[] a) {
181         int length = a.length;
182         System.out.println(length);
183         for (int d = (int) Math.ceil(length / 2); d > 0; d /= 2) {
184             for (int i = 0; i < d; i++) {
185                 System.out.println("i=" + i + " d=" + d);
186                 for (int j = i + d; j < length; j += d) {
187                     int temp = a[j];
188                     int k = j - d;
189                     System.out.println("j=" + j + " temp=" + temp + " k=" + k);
190                     for (; k >= 0 && temp < a[k]; k -= d) {
191                         System.out.println("k+d=" + (k + d) + " k=" + k + " a[k+d]=" + a[k + d] + " a[k]=" + a[k]);
192                         a[k + d] = a[k];
193                     }
194                     System.out.println("end" + "k+d=" + (k + d) + " a[k+d]=" + a[k + d] + " temp=" + temp);
195                     a[k + d] = temp;
196                 }
197             }
198         }
199         for (int i = 0; i < a.length; i++) {
200             System.out.println("shellsort" + a[i]);
201         }
202     }
203
204     public static void selectSort(int[] a) {
205         int length = a.length;
206         int position = 0;
207         for (int i = 0; i < length - 1; i++) {
208             int temp = a[i];
209             int j = i + 1;
210             position = i;
211             for (; j < length; j++) {
212                 if (a[j] < temp) {
213                     temp = a[j];
214                     position = j;
215                 }
216             }
217             a[position] = a[i];
218             a[i] = temp;
219         }
220         for (int i = 0; i < a.length; i++) {
221             System.out.println("selectSort" + a[i]);
222         }
223     }
224
225     public static void insertSort(int[] a) {
226         int temp = 0;
227         for (int i = 1; i < a.length; i++) {
228             int j = i - 1;
229             temp = a[j + 1];
230             for (; j >= 0 && a[j] > temp; j--) {
231                 System.out.println(j);
232                 a[j + 1] = a[j];
233             }
234             System.out.println(j);
235             a[j + 1] = temp;
236         }
237         for (int i = 0; i < a.length; i++) {
238             System.out.println(a[i]);
239         }
240     }
241 }
时间: 2024-12-15 06:52:20

8个排序算法——java的相关文章

排序算法Java实现

排序算法Java实现 排序算法的分类: 内部排序,在排序过程中,全部记录放在内存中,称为内部排序: 外部排序,在排序过程中需要使用外部存储(磁盘),则称为外部排序. 主要介绍内部排序: 插入排序:直接插入排序.二分法插入排序.希尔排序 选择排序:简单选择排序.堆排序 交换排序:冒泡排序.快速排序 归并排序 基数排序 插入排序 直接插入排序 基本思想:对于给定的一组记录,初始时假设第一个记录自成一个有序序列,其余记录为无序序列.接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的

经典排序算法(Java实现)

以下程序均将数据封装于DataWrap数据包装类中,如下所示: 1 //数据包装类 2 class DataWrap implements Comparable<DataWrap> 3 { 4 int data; 5 String flag; 6 public DataWrap(int data,String flag) 7 { 8 this.data = data; 9 this.flag = flag; 10 } 11 //重写compareTo方法 12 public int compa

数据结构排序算法Java实现

闲的无聊又拿起了大学的数据结构的书看起来 <数据结构(c语言版)>严蔚敏 吴伟民编著. 里面有几个排序算法,感觉挺好玩的,就想着写出来玩玩. package test.sort; /** * @Title: TODO * @Description: TODO * @author: * @date: 2014-8-10 上午11:20:43 * */ public class quickSort { private static int datas[] = {23,42,12,45,56,63,

排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中"选择"出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插

八大排序算法JAVA实现(时间复杂度O(n*logn)篇)

本文讲述时间复杂度为n*logn的排序算法:归并排序.快速排序.堆排序以及希尔排序的原理.Java实现以及变形应用. 一.归并排序 原理:把两个有序数列合并为一个有序数列.需递归实现. Java实现: 1 public int[] mergeSort(int[] a, int n) 2 { 3 return doMergeSort(a, n, 0, n - 1); 4 } 5 public int[] doMergeSort(int[] a, int n, int start, int end)

九大排序算法Java实现

之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂度.稳定性分类: 2.排序算法问题描述与实现 2.1冒泡排序(交换排序-稳定) [问题描述]对于一个int数组,请编写一个冒泡排序算法,对数组元素排序. 问题分析:冒泡排序,顾名思义,从前往后遍历,每次遍历在末尾固定一个最大值. 易错点:每次内层循环结束都会在末尾确定一个元素的位置,因此内层循环的判

八大排序算法Java(转)

目录(?)[-] 概述 插入排序直接插入排序Straight Insertion Sort 插入排序希尔排序Shells Sort 选择排序简单选择排序Simple Selection Sort 选择排序堆排序Heap Sort 交换排序冒泡排序Bubble Sort 交换排序快速排序Quick Sort 归并排序Merge Sort 桶排序基数排序Radix Sort 总结 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序

排序系列 之 希尔排序算法 —— Java实现

基本思想: 希尔排序的实质就是分组插入排序,又称缩小增量法. 将整个无序序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序. 因为直接插入排序在元素基本有序的情况下,效率是很高的,因此希尔排序在时间效率上有很大提高. 实例: 无序序列:int a[] = {3,1,5,7,2,4,9,6}; 第一趟时: n=8; gap=n/2=4; 把整个序列共分成了4个子序列{3,

排序算法 java实现

几个排序算法,我是按照算法的伪代码用java实现的,刚开始是int类型的,后来换成泛型. 这是好早之前写的代码了,现在那出来温习下,就当是准备面试把 1.简单选择排序 这个算法应该是最简单的把,就是在数组中从头开始循环,选择最小的放在最前面,这个应该很好实现就不废话了 public static <T extends Comparable<T>> T[] genericsimpleselectionsort(T[] a){ for (int i = 0; i < a.leng

Java排序算法-Java入门|Java基础课程

Java 排序算法 1. 课程目标 排序是任何语言都会使用到的功能之一,然成果排序的算法有很多,对空间的要求及其时间效率也不尽相同. 本文章以Java语言示例,通过对空间要求.时间效率要求,来对比各种排序算法的使用场景 2.适用对象 Java语言初学者 Java算法爱好者 3.相关概念 3.1 排序概念 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 3.2 排序算法 排序算法,就是如何使得记录按照要求排列的方法. 排序算法在很多领域得到相当地重视,尤其是在