今天很高兴 终于系统的实现了八大排序算法!不说了 直接上代码 !代码都是自己敲的, 亲测可用没有问题!

另:说一下什么是八大排序算法:

插入排序

希尔排序

选择排序

堆排序

冒泡排序

快速排序

归并排序

基数排序

  1. public class SortHandler {
  2.  
  3. public static void main(String args[])
  4. {
  5. //int a[] = {13,12,5,71,2,54,9,6};
  6. // straightInsertSort(a,8);
  7. // print(a,8);
  8. // shellSort(a, 8);
  9. // print(a,8);
  10. // simpleSelectSort(a,8);
  11. // print(a,8);
  12. // bubbleSort2(a, 8);
  13. // print(a,8);
  14. // quickSort(a,8);
  15. // print(a,8);
  16. // print(a,8);
  17. // heapSort(a,8);
  18. // print(a,8);
  19. // print(a,8);
  20. // mergeSort(a);
  21. // print(a,8);
  22. //
  23. // int[] a = { 49, 38, 65, 197, 76, 213, 27, 50 };
  24. // radixSort(a);
  25. }
  26.  
  27. public static void print(int a[], int n){
  28. for(int j= 0; j<n; j++){
  29. System.out.print(a[j]);
  30. System.out.print(" ");
  31. }
  32. System.out.println();
  33. }
  34.  
  35. public static void straightInsertSort(int a[], int n)
  36. {
  37. if(n <= 1)
  38. {
  39. return;
  40. }
  41.  
  42. for(int i = 1; i < n; i++)
  43. {
  44. int x = a[i];
  45. int j = i -1;
  46. while(j >= 0 && a[j] > x)
  47. {
  48. a[j+1] = a[j];
  49. j--;
  50. }
  51.  
  52. a[j+1] = x;
  53.  
  54. print(a,8);
  55. }
  56. }
  57.  
  58. public static void shellInsertSort(int a[], int n, int dk)
  59. {
  60. if(n <= 1 || dk > n)
  61. {
  62. return;
  63. }
  64.  
  65. for(int i = dk * 2 -1; i < n; i++)
  66. {
  67. int x = a[i];
  68. int j = i - dk;
  69. while(j >= 0 && a[j] > x)
  70. {
  71. a[j+dk] = a[j];
  72. j = j - dk;
  73. }
  74.  
  75. a[j+dk] = x;
  76.  
  77. print(a,8);
  78. }
  79. }
  80.  
  81. public static void shellSort(int a[], int n)
  82. {
  83. int dk = n/2;
  84. while(dk >= 1)
  85. {
  86. shellInsertSort(a, n, dk);
  87. dk = dk/2;
  88. }
  89. }
  90.  
  91. public static void simpleSelectSort(int a[], int n)
  92. {
  93. int index = 0;
  94. for(int i = 0; i < n-1; i++)
  95. {
  96. index = i;
  97. for(int j = i; j < n-1; j++)
  98. {
  99. if(a[j+1] < a[index])
  100. {
  101. index = j+1;
  102. }
  103. }
  104.  
  105. if(index != i)
  106. {
  107. int temp = a[index];
  108. a[index] = a[i];
  109. a[i] = temp;
  110. }
  111.  
  112. print(a,8);
  113. }
  114. }
  115.  
  116. public static void heapSort(int a[], int length)
  117. {
  118.  
  119. buildHeap(a, length);
  120. print(a,8);
  121.  
  122. for(int i = length -1; i > 0; i --)
  123. {
  124. swap(a, 0, i);
  125. heapAjust(a, 0, i-1);
  126. print(a,8);
  127. }
  128. }
  129.  
  130. public static void buildHeap(int a[], int length)
  131. {
  132. for(int i = length/2 -1; i >= 0; i --)
  133. {
  134. heapAjust(a, i, length);
  135. }
  136. }
  137.  
  138. public static void heapAjust(int a[], int s, int length)
  139. {
  140. if(s < 0)
  141. {
  142. return;
  143. }
  144.  
  145. int child = 2 * s + 1;
  146. while(child < length)
  147. {
  148. if(child + 1 < length && a[child] > a[child + 1])
  149. {
  150. child ++;
  151. }
  152. if(a[child] < a[s])
  153. {
  154. swap(a, child, s);
  155. s = child;
  156. child = 2*s + 1;
  157. }
  158. else
  159. {
  160. break;
  161. }
  162. }
  163. }
  164.  
  165. public static void bubbleSort(int a[], int n)
  166. {
  167. for(int i = 0; i < n-1; i++)
  168. {
  169. for(int j = 0; j < n-i-1; j++)
  170. {
  171. if(a[j] > a[j+1])
  172. {
  173. int temp = a[j];
  174. a[j] = a[j+1];
  175. a[j+1] = temp;
  176. }
  177. }
  178. print(a,8);
  179. }
  180. }
  181.  
  182. public static void bubbleSort2(int a[], int n)
  183. {
  184. int high, low, temp;
  185. high = n -1;
  186. low = 0;
  187. while(low < high)
  188. {
  189. for(int j = low; j < high; j++)
  190. {
  191. if(a[j] > a[j+1])
  192. {
  193. temp = a[j];
  194. a[j] = a[j+1];
  195. a[j+1] = temp;
  196. }
  197. }
  198.  
  199. for(int k = high; k > low; k--)
  200. {
  201. if(a[k] < a[k-1])
  202. {
  203. temp = a[k];
  204. a[k] = a[k-1];
  205. a[k-1] = temp;
  206. }
  207. }
  208. low ++;
  209. high --;
  210.  
  211. print(a, 8);
  212. }
  213. }
  214.  
  215. public static void swap(int a[], int i, int j)
  216. {
  217. int temp = a[i];
  218. a[i] = a[j];
  219. a[j] = temp;
  220. }
  221.  
  222. public static int partition(int a[], int low, int high)
  223. {
  224. int pivotLoc = low;
  225. while(low < high)
  226. {
  227. while(a[high] > a[pivotLoc] && low < high)
  228. {
  229. high --;
  230. }
  231.  
  232. if(low < high)
  233. {
  234. swap(a, pivotLoc, high);
  235. pivotLoc = high;
  236. }
  237. else
  238. {
  239. break;
  240. }
  241.  
  242. while(a[low] < a[pivotLoc] && low < high)
  243. {
  244. low ++;
  245. }
  246.  
  247. if(low < high)
  248. {
  249. swap(a, pivotLoc, low);
  250. pivotLoc = low;
  251. }
  252. else
  253. {
  254. break;
  255. }
  256. }
  257.  
  258. print(a, 8);
  259.  
  260. return pivotLoc;
  261. }
  262.  
  263. public static void quickSort(int a[], int low, int high)
  264. {
  265. if(low < high)
  266. {
  267. int pivotLoc = partition(a, low, high);
  268. quickSort(a, low, pivotLoc - 1);
  269. quickSort(a, pivotLoc + 1, high);
  270. }
  271. }
  272.  
  273. public static void quickSort(int a[], int length)
  274. {
  275. quickSort(a, 0, length-1);
  276. }
  277.  
  278. public static void mergeSort(int a[])
  279. {
  280. int low = 0, high = a.length - 1;
  281. mergeSort(a, low, high);
  282. }
  283.  
  284. public static void mergeSort(int a[], int low, int high)
  285. {
  286. System.out.println("mergeSort-- " + "low: " + low + " high: " + high);
  287. int mid = (low + high) / 2;
  288. if(low < high)
  289. {
  290. mergeSort(a, low, mid);
  291. mergeSort(a, mid + 1, high);
  292. merge(a, low, mid, high);
  293. }
  294. print(a,8);
  295. return;
  296. }
  297.  
  298. private static void merge(int[] a, int low, int mid, int high)
  299. {
  300. if(low >= high)
  301. {
  302. return;
  303. }
  304. int[] temp = new int[high - low + 1];
  305.  
  306. int i=low, j=mid + 1, k=0;
  307. for(; i <= mid && j <= high; k++)
  308. {
  309. if(a[i] < a[j])
  310. {
  311. temp[k] = a[i];
  312. i++;
  313. }
  314. else
  315. {
  316. temp[k] = a[j];
  317. j++;
  318. }
  319. }
  320.  
  321. if(i <= mid)
  322. {
  323. for(; i <= mid; i++,k++)
  324. {
  325. temp[k] = a[i];
  326. }
  327. }
  328. else if(j <= high)
  329. {
  330. for(; j <= high; j++,k++)
  331. {
  332. temp[k] = a[j];
  333. }
  334. }
  335.  
  336. for(int m = 0; m < temp.length; m++)
  337. {
  338. a[m + low] = temp[m];
  339. }
  340. }
  341.  
  342. public static int getMaxDigits(int a[])
  343. {
  344. //first get the max one
  345. int max = a[0];
  346. for(int i = 1; i < a.length; i++)
  347. {
  348. if(max < a[i])
  349. {
  350. max = a[i];
  351. }
  352. }
  353. if(max < 0)
  354. {
  355. return -1;
  356. }
  357.  
  358. //then get the max digits
  359. int digits = 0;
  360. while(max > 0)
  361. {
  362. digits ++;
  363. max /= 10;
  364. }
  365. return digits;
  366. }
  367.  
  368. public static int getNumInPosition(int number, int digit)
  369. {
  370. for(int i = 0; i < digit; i ++)
  371. {
  372. number /= 10;
  373. }
  374.  
  375. number %= 10;
  376. return number;
  377. }
  378.  
  379. public static void radixSort(int a[])
  380. {
  381. int length = a.length;
  382. int digits = getMaxDigits(a);
  383. int array[][] = new int[10][a.length + 1];
  384. for(int i = 0; i < 10; i++)
  385. {
  386. //the first element stores the column count;
  387. //instantiate
  388. array[i][0] = 0;
  389. }
  390.  
  391. print(a, 8);
  392.  
  393. for(int i = 0; i < digits; i++)
  394. {
  395. for(int j = 0; j < length; j++)
  396. {
  397. int row = getNumInPosition(a[j], i);
  398. int col = ++array[row][0];
  399. array[row][col] = a[j];
  400. }
  401.  
  402. for(int row = 0, m = 0; row < 10; row++)
  403. {
  404. int cols = array[row][0];
  405. for(int col = 1; col <= cols; col++)
  406. {
  407. a[m++] = array[row][col];
  408. }
  409.  
  410. //reinitialize
  411. array[row][0] = 0;
  412. }
  413.  
  414. print(a, 8);
  415. }
  416. }
  417.  
  418. }

八大排序算法 JAVA实现 亲自测试 可用!的更多相关文章

  1. 八大排序算法Java实现

    本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...

  2. 八大排序算法Java

    目录(?)[-] 概述 插入排序直接插入排序Straight Insertion Sort 插入排序希尔排序Shells Sort 选择排序简单选择排序Simple Selection Sort 选择 ...

  3. 八大排序算法java代码

    1.冒泡排序 public static void main(String[] args) { int[] arr = {1,4,2,9,5,7,6}; System.out.println(&quo ...

  4. 八大排序算法总结与java实现(转)

    八大排序算法总结与Java实现 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 ...

  5. 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)

    一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...

  6. Java八大排序算法

    Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...

  7. [Data Structure & Algorithm] 八大排序算法

    排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...

  8. Python实现八大排序算法(转载)+ 桶排序(原创)

    插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想 ...

  9. Python - 八大排序算法

    1.序言 本文使用Python实现了一些常用的排序方法.文章结构如下: 1.直接插入排序 2.希尔排序 3.冒泡排序 4.快速排序 5.简单选择排序 6.堆排序 7.归并排序 8.基数排序 上述所有的 ...

随机推荐

  1. 微信公众平台开发(1) 通用的工具类CommonUtil

    1.通用的调用微信的方法 /** * * @param requestUrl 接口地址 * @param requestMethod 请求方法:POST.GET... * @param output ...

  2. 解决无法定位程序输入点SymEnumSymbols于动态链接库dbghelp.dll

    作者:朱金灿 来源:http://blog.csdn.net/clever101 下载一个源码,使用VS2008编译链接无问题,运行时出现一个错误:无法定位程序输入点SymEnumSymbols于动态 ...

  3. Delphi MD5加密

    Delphi MD5加密   1. 引用两个单元        uses   IdHash,IdHashMessageDigest;    2.编写加密函数    function TEncrypti ...

  4. (让你提前知道软件开发33):数据操纵语言(DML)

    文章2部分 数据库SQL语言 数据操纵语言(DML) 数据操纵语言(Data Manipulation Language,DML)包含insert.delete和update语句,用于增.删.改数据. ...

  5. REST = HTTP动词(GET POST PUT DELETE)操作 + 服务器暴露资源URI,最后返回状态码(充分利用HTTP自身的特征,而不仅仅是把HTTP当作传输协议。Rest协议是面向资源的,SOAP是面向服务的),表现形式可以是JSON XML BIN,举例很清楚

    好处是,操作系统或者浏览器,可以重复利用它们内置的缓存机制等等. 增删改查都是一个地址,具体靠http头部信息判断. 利用HTTP协议语义构建的语义化.可缓存的接口. URL定位资源,用HTTP动词( ...

  6. IOC学习1

    学习蒋金楠的 ASP.NET Core中的依赖注入(1):控制反转(IoC) 而来,这篇文章经典异常.一定要多读.反复读. 这篇文章举了一个例子,就是所谓的mvc框架,一开始介绍mvc的思想,由一个d ...

  7. 简明Python3教程 9.函数

    简介 函数是程序的可复用片段,允许你为语句块赋予名字之后在程序的任何地方运行它们任意次,这称做函数调用. 我们已经使用过一些内建函数,例如len和range等. 函数也许是任何有意义的软件中最重要的构 ...

  8. 创建一个显示所有预定义WPF颜色的ListBox

    原文 Creating a ListBox that Shows All Predefined WPF Colors 在WPF中,您可以使用Colors类访问一系列预定义颜色,这些颜色定义为Color ...

  9. [ACM] POJ 3096 Surprising Strings (map使用)

    Surprising Strings Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5783   Accepted: 379 ...

  10. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...