文库网
关注排行榜

当前无数据...

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

文章目录

初级排序算法

选择排序

  • 动画演示

    {tilte}-3457255576

  • 代码实现

  1. <code class="prism language-java">public class selectSort {
  2. public static void main(String[] args) {
  3. int[] nums = {1,5,6,2,3,4,7,8,9};
  4. selectSort(nums);
  5. for (int num:nums){
  6. System.out.print(num);
  7. }
  8. }
  9. private static void selectSort(int[] nums){
  10. for (int i = 0;i<nums.length;i++){
  11. int minIndex = i;
  12. for (int j = i+1;j<nums.length;j++){
  13. if(nums[minIndex]>nums[j]){
  14. minIndex = j;
  15. }
  16. }
  17. swap(nums,i,minIndex);
  18. }
  19. }
  20. private static void swap(int[] nums,int index1,int index2){
  21. int temp = nums[index1];
  22. nums[index1] = nums[index2];
  23. nums[index2] = temp;
  24. }
  25. }
  26. </code>
复制代码

插入排序

  • 动画演示
    {tilte}-3457255576
  • 代码实现
  1. <code class="prism language-java">public class insertSort {
  2. public static void main(String[] args) {
  3. int[] nums = {1,5,6,2,3,4,7,8,9};
  4. insertSort(nums);
  5. for (int num:nums){
  6. System.out.print(num);
  7. }
  8. }
  9. private static void insertSort(int[] nums){
  10. int len = nums.length;
  11. for(int i = 1;i<len;i++){
  12. for(int j=i;j>0;j--){
  13. if(nums[j-1]>nums[j]){
  14. swap(nums,j-1,j);
  15. }else{
  16. break;
  17. }
  18. }
  19. }
  20. }
  21. private static void swap(int[] nums,int index1,int index2){
  22. int temp = nums[index1];
  23. nums[index1] = nums[index2];
  24. nums[index2] = temp;
  25. }
  26. }
  27. </code>
复制代码
  • 优化版本
  1. <code class="prism language-java">void insertSort1(int[] nums){
  2. int len = nums.length;
  3. for(int i = 1;i<len;i++){
  4. int temp = nums[i];
  5. int j = i-1;
  6. while (j>=0 && nums[j]>temp){
  7. nums[j+1] = nums[j];
  8. j--;
  9. }
  10. nums[j+1] = temp;
  11. }
  12. }
  13. </code>
复制代码

希尔排序

  • 动画演示

    {tilte}-3457255576

  • 代码实现

  1. <code class="prism language-java">public class ShellSort {
  2. public static void main(String[] args) {
  3. int[] nums = {1,5,6,2,3,4,7,8,9};
  4. shellSort(nums);
  5. for (int num:nums){
  6. System.out.print(num);
  7. }
  8. }
  9. private static void shellSort(int[] nums){
  10. int len = nums.length;
  11. int dalta = len/2;
  12. while (dalta>=1){
  13. for(int i = len-1;i>=len-dalta;i--){
  14. for(int j = i;j>=dalta;j-=dalta){
  15. if(nums[j-dalta]>nums[j]){
  16. swap(nums,j-dalta,j);
  17. }
  18. }
  19. }
  20. dalta /=2;
  21. }
  22. }
  23. private static void swap(int[] nums,int index1,int index2){
  24. int temp = nums[index1];
  25. nums[index1] = nums[index2];
  26. nums[index2] = temp;
  27. }
  28. }
  29. </code>
复制代码

冒泡排序

  • 动画演示
    {tilte}-3457255576
  • 代码实现
  1. <code class="prism language-java">public class bubbleSort {
  2. public static void main(String[] args) {
  3. int[] nums = {1,5,6,2,3,4,7,8,9};
  4. bubbleSort(nums);
  5. for (int num:nums){
  6. System.out.print(num);
  7. }
  8. }
  9. private static void bubbleSort(int[] nums){
  10. int len = nums.length;
  11. for(int i = 0;i<len;i++){
  12. boolean flag = true;
  13. for (int j = 0;j<len-i-1;j++){
  14. if(nums[j]> nums[j+1]){
  15. swap(nums,j+1,j);
  16. flag = false;
  17. }
  18. }
  19. if(flag) break;
  20. }
  21. }
  22. private static void swap(int[] nums,int index1,int index2){
  23. int temp = nums[index1];
  24. nums[index1] = nums[index2];
  25. nums[index2] = temp;
  26. }
  27. }
  28. </code>
复制代码

高级排序算法

归并排序

  • 动画演示
    {tilte}-3457255576
  • 代码实现
  1. <code class="prism language-java">public class megerSort {
  2. public static void main(String[] args) {
  3. int arr[] = { 8, 4, 5, 7, 1, 3, 6, 2, 9 };
  4. int temp[] = new int[arr.length]; //归并排序需要一个额外空间
  5. mergeSort(arr, 0, arr.length - 1, temp);
  6. System.out.println("归并排序后=" + Arrays.toString(arr));
  7. }
  8. private static void mergeSort(int[] arr, int left, int right, int[] temp) {
  9. if(left>=right){
  10. return;
  11. }
  12. int mid = left + (right-left)/2;
  13. //向左边递归分解
  14. mergeSort(arr,left,mid,temp);
  15. //向右边递归分解
  16. mergeSort(arr,mid+1,right,temp);
  17. //合并
  18. merge(arr,left,mid,right,temp);
  19. }
  20. private static void merge(int[] arr, int left, int mid, int right, int[] temp) {
  21. int i = left;
  22. int j = mid + 1;
  23. int t = 0;
  24. while (i<=mid && j<=right){
  25. if(arr[i]<=arr[j]){
  26. temp[t] = arr[i];
  27. t++;
  28. i++;
  29. }else{
  30. temp[t] = arr[j];
  31. t++;
  32. j++;
  33. }
  34. }
  35. while (i<=mid){
  36. temp[t] = arr[i];
  37. t++;
  38. i++;
  39. }
  40. while (j<=right){
  41. temp[t] = arr[j];
  42. t++;
  43. j++;
  44. }
  45. t = 0;
  46. int tempLeft = left;
  47. while (tempLeft<=right){
  48. arr[tempLeft] = temp[t];
  49. tempLeft++;
  50. t++;
  51. }
  52. }
  53. }
  54. </code>
复制代码

快速排序

  • 动画演示

    {tilte}-3457255576

  • 代码实现

  1. <code class="prism language-java">public class quickSort {
  2. public static void main(String[] args) {
  3. int[] nums = {1,5,2,6,4,7,8,9,-1,-2};
  4. quickSort(nums,0,nums.length-1);
  5. System.out.println(Arrays.toString(nums));
  6. }
  7. private static void quickSort(int[] nums,int left,int right){
  8. int l = left;
  9. int r = right;
  10. int mid = left + (right-left)/2;
  11. int privot = nums[mid];
  12. while (l<r){
  13. while (nums[l]<privot){
  14. l++;
  15. }
  16. while (nums[r]>privot){
  17. r--;
  18. }
  19. if(l>=r){
  20. break;
  21. }
  22. swap(nums,l,r);
  23. if (nums[l]==privot){
  24. r--;
  25. }
  26. if(nums[r]==privot){
  27. l++;
  28. }
  29. }
  30. if(l==r){
  31. l++;
  32. r--;
  33. }
  34. if (left<r){
  35. quickSort(nums,left,r);
  36. }
  37. if (right>l){
  38. quickSort(nums,l,right);
  39. }
  40. }
  41. private static void swap(int[] nums,int index1,int index2){
  42. int temp = nums[index1];
  43. nums[index1] = nums[index2];
  44. nums[index2] = temp;
  45. }
  46. }
  47. </code>
复制代码

注:本文的动画来源于网络。

你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步


本站资源均由网上搜集或网友上传提供,内容仅供观摩学习交流之用,本站将不对任何资源负法律责任.如有侵犯您的版权,请及时联系我们(邮箱:892481490@qq.com,客服QQ:892481490),我们会尽快处理!QQ350550790是骗子,注意不要和他交易!!!
发帖求助前要善用【论坛搜索】功能, 那里可能会有你要找的答案,也能为你节约不少学习时间;
如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加(威望)和(贡献)而不会扣除自己的积分。
如发现灌水帖、病毒木马帖、广告帖、工具不能正常使用、网盘链接失效,请点击【举报】 核实有几率会给予额外的B币奖励哦!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    发布资源 快速回复 返回列表 客服中心 官方QQ群

    QQ|小黑屋|手机版|编程之家论坛 ( 桂ICP备18002029号 )

    Powered by 编程之家  © 20019-2021