本帖最后由 穿靴子的猫 于 2013-8-24 11:02 编辑
- <div class="blockcode"><blockquote>// 1.耳熟能详的冒泡排序
- int[] arr = { 10, 23, 11, 56, 45, 26, 59, 28, 84, 79 }; // 给出原始数组序列
- int temp;
- System.out.println("初始序列的数组为:");// 输出在数组中数字的顺序
- for (int a : arr) {
- System.out.print(a + " ");
- }
- System.out.println();
- for (int i = 0; i < arr.length - 1; i++) {
- for (int j = 0; j < arr.length - i - 1; j++) {
- if (arr[j] > arr[j + 1]) {
- temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
- }
- System.out.println("排好序的数组:");// 输出排好序的数组
- for (int a : arr) {
- System.out.print(a + " ");
- }
复制代码 冒泡排序已经修改了- // 2.选择排序法
- public static void main(String[] args) {
- int[] arr = { 10, 23, 11, 56, 45, 26, 59, 28, 84, 79 };
- int index, temp;
- System.out.println("初始数组为:");
- for (int a : arr) { // 对n个记录进行n-1趟的选择排序
- System.out.print(a+" ");
- }
- for(int i = 0; i < arr.length-1; i++) {
- index=i; //初始化第i趟选择排序的最小记录的指针
- for (int j = i+1; j <arr.length; j++) { //在无序区选取最小记录
- if(arr[j]<arr[index]){
- index=j;
- }
- }
- //
- if (index!=i){ //讲最小记录于arr交换
- temp=arr[i];
- arr[i]=arr[index];
-
- arr[index]=temp;
- }
- }
- System.out.println();
-
- System.out.println("排序后数组为:");
- for(int a : arr){
-
- System.out.print(a+" ");
- }
- }
-
- }
复制代码- // 3.插入排序法
- public static void main(String[] args) {
- int[] arr = { 10, 23, 11, 56, 45, 26, 59, 28, 84, 79 }; // 给出原始数的序列
- int i, j, temp; // 定义变量名称
- System.out.println("初始数组为:"); // 输出初始序列
- for (int a : arr) {
- System.out.print(a + " ");
- }
- for (i = 1; i < arr.length; i++) {
- temp = arr[i]; // 设置哨兵,暂存当前值
- for (j = i - 1; j >= 0 && temp < arr[j]; j--) { // 寻找插入位置
- arr[j + 1] = arr[j];
- }
- arr[j + 1] = temp; // 大于当前值的,插在当前值后面
- }
- System.out.println();
- System.out.println("排序后数组为:"); // 输出新序列
- for (int a : arr) {
- System.out.print(a + " ");
- }
- }
复制代码- // 4.归并排序
- private static void merge(int r[], int r1[], int s, int m, int t) {
- int i = s, j = m + 1, k = s;
- while (i <= m && j <= t) {
- if (r[i] <= r[j]) {
- r1[k++] = r[i++];// 取r和r[j]中比较小者放如r1[k]
- } else {
- r1[k++] = r[j++];
- }
- }
- if (i <= m) {
- while (i <= m) { // 若第一个子序列处理完,则进行收尾处理
- r1[k++] = r[i++];
- }
- } else {
- while (j <= t) {// 若第二个子序列处理完,则进行收尾处理
- r1[k++] = r[j++];
- }
- }
- }
- private static void mergePass(int r[], int r1[], int n, int h) {
- int i = 0;
- while (i <= n - 2 * h) {// 待归并记录至少有两个长度为h的子序列
- merge(r, r1, i, i + h - 1, i + 2 * h - 1);
- i += 2 * h;
- }
- if (i < n - h) {
- merge(r, r1, i, i + h - 1, n); // 待归并序列中有一个长度小于h
- } else {
- for (int k = i; k <= n; k++) {// 待归并序列中只剩一个子序列
- r1[k] = r[k];
- }
- }
- }
- public static void mergeS(int r[], int r1[], int n) {
- int h = 1;
- while (h < n) {
- mergePass(r, r1, n - 1, h);
- h = 2 * h;
- mergePass(r1, r, n - 1, h);
- h = 2 * h;
- }
- }
- public static void main(String[] args) {
- int r[] = { 36, 45, 12, 56 };
- int r1[] = new int[4];
- System.out.println("原始数组为:");
- for (int i = 0; i < r.length; i++) {
- System.out.print(" " + r[i]);
- }
- mergeS(r, r1, r.length);
- System.out.println();
- System.out.println("新数组为:");
- for (int i = 0; i < r.length; i++) {
- System.out.print(" " + r[i]);
- }
- }
复制代码 因上传过程中出现排版错误..所以如果有不对请提醒 第四个归并测试没问题 |