A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 穿靴子的猫 中级黑马   /  2013-8-23 23:47  /  812 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 穿靴子的猫 于 2013-8-24 11:02 编辑
  1. <div class="blockcode"><blockquote>// 1.耳熟能详的冒泡排序
  2.                 int[] arr = { 10, 23, 11, 56, 45, 26, 59, 28, 84, 79 }; // 给出原始数组序列
  3.                 int temp;
  4.                 System.out.println("初始序列的数组为:");// 输出在数组中数字的顺序
  5.                 for (int a : arr) {
  6.                         System.out.print(a + " ");
  7.                 }
  8.                 System.out.println();
  9.                 for (int i = 0; i < arr.length - 1; i++) {
  10.                         for (int j = 0; j < arr.length - i - 1; j++) {
  11.                                 if (arr[j] > arr[j + 1]) {
  12.                                         temp = arr[j];
  13.                                         arr[j] = arr[j + 1];
  14.                                         arr[j + 1] = temp;
  15.                                 }
  16.                         }
  17.                 }
  18.                 System.out.println("排好序的数组:");// 输出排好序的数组
  19.                 for (int a : arr) {
  20.                         System.out.print(a + " ");
  21.                 }
复制代码
冒泡排序已经修改了
  1. // 2.选择排序法
  2.         public static void main(String[] args) {
  3.                 int[] arr = { 10, 23, 11, 56, 45, 26, 59, 28, 84, 79 };
  4.                 int index, temp;
  5.                 System.out.println("初始数组为:");
  6.                 for (int a : arr) { // 对n个记录进行n-1趟的选择排序
  7.                         System.out.print(a+" ");
  8.                 }
  9.                 for(int i = 0; i < arr.length-1; i++) {
  10.                         index=i;  //初始化第i趟选择排序的最小记录的指针
  11.                         for (int j = i+1; j <arr.length; j++) { //在无序区选取最小记录
  12.                                 if(arr[j]<arr[index]){
  13.                                         index=j;
  14.                                 }
  15.                         }
  16.                                                         //
  17.                          if (index!=i){ //讲最小记录于arr交换
  18.                                 temp=arr[i];
  19.                                 arr[i]=arr[index];
  20.                                                         
  21.                                 arr[index]=temp;
  22.                          }
  23.                 }
  24.                 System.out.println();
  25.                                                         
  26.                 System.out.println("排序后数组为:");
  27.                 for(int a : arr){
  28.                                                         
  29.                         System.out.print(a+" ");
  30.                 }
  31.         }
  32.                
  33. }
复制代码
  1. // 3.插入排序法
  2.         public static void main(String[] args) {
  3.                 int[] arr = { 10, 23, 11, 56, 45, 26, 59, 28, 84, 79 }; // 给出原始数的序列
  4.                 int i, j, temp; // 定义变量名称
  5.                 System.out.println("初始数组为:"); // 输出初始序列
  6.                 for (int a : arr) {
  7.                         System.out.print(a + " ");
  8.                 }
  9.                 for (i = 1; i < arr.length; i++) {
  10.                         temp = arr[i]; // 设置哨兵,暂存当前值
  11.                         for (j = i - 1; j >= 0 && temp < arr[j]; j--) { // 寻找插入位置
  12.                                 arr[j + 1] = arr[j];
  13.                         }
  14.                         arr[j + 1] = temp; // 大于当前值的,插在当前值后面
  15.                 }
  16.                 System.out.println();
  17.                 System.out.println("排序后数组为:"); // 输出新序列
  18.                 for (int a : arr) {
  19.                         System.out.print(a + " ");
  20.                 }
  21.         }
复制代码
  1. // 4.归并排序
  2.         private static void merge(int r[], int r1[], int s, int m, int t) {
  3.                 int i = s, j = m + 1, k = s;
  4.                 while (i <= m && j <= t) {
  5.                         if (r[i] <= r[j]) {
  6.                                 r1[k++] = r[i++];// 取r和r[j]中比较小者放如r1[k]
  7.                         } else {
  8.                                 r1[k++] = r[j++];
  9.                         }
  10.                 }
  11.                 if (i <= m) {
  12.                         while (i <= m) { // 若第一个子序列处理完,则进行收尾处理
  13.                                 r1[k++] = r[i++];
  14.                         }
  15.                 } else {
  16.                         while (j <= t) {// 若第二个子序列处理完,则进行收尾处理
  17.                                 r1[k++] = r[j++];
  18.                         }
  19.                 }
  20.         }

  21.         private static void mergePass(int r[], int r1[], int n, int h) {
  22.                 int i = 0;
  23.                 while (i <= n - 2 * h) {// 待归并记录至少有两个长度为h的子序列
  24.                         merge(r, r1, i, i + h - 1, i + 2 * h - 1);
  25.                         i += 2 * h;
  26.                 }
  27.                 if (i < n - h) {
  28.                         merge(r, r1, i, i + h - 1, n); // 待归并序列中有一个长度小于h
  29.                 } else {
  30.                         for (int k = i; k <= n; k++) {// 待归并序列中只剩一个子序列
  31.                                 r1[k] = r[k];
  32.                         }
  33.                 }
  34.         }

  35.         public static void mergeS(int r[], int r1[], int n) {
  36.                 int h = 1;
  37.                 while (h < n) {
  38.                         mergePass(r, r1, n - 1, h);
  39.                         h = 2 * h;
  40.                         mergePass(r1, r, n - 1, h);
  41.                         h = 2 * h;
  42.                 }
  43.         }

  44.         public static void main(String[] args) {
  45.                 int r[] = { 36, 45, 12, 56 };
  46.                 int r1[] = new int[4];
  47.                 System.out.println("原始数组为:");
  48.                 for (int i = 0; i < r.length; i++) {
  49.                         System.out.print(" " + r[i]);
  50.                 }
  51.                 mergeS(r, r1, r.length);
  52.                 System.out.println();
  53.                 System.out.println("新数组为:");
  54.                 for (int i = 0; i < r.length; i++) {
  55.                         System.out.print(" " + r[i]);
  56.                 }
  57.         }
复制代码
因上传过程中出现排版错误..所以如果有不对请提醒 第四个归并测试没问题

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

1 个回复

倒序浏览
冒泡排序错了。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马