首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

冒泡排序法的改进解决思路

2013-11-25 
冒泡排序法的改进若给出10个数字,分别为34 66 90 45 100 150 65 92 27 74,用冒泡排序法后可得到正确排序,

冒泡排序法的改进
若给出10个数字,分别为34 66 90 45 100 150 65 92 27 74,用冒泡排序法后可得到正确排序,但其中有些不需要比较,可以直接跳过,该如何处理,希望大神指教!谢谢!
# include<stdio.h>
int main()
  {
    int a[10];
    int i,j,t;
    printf("input 10 number:\n");
    for(i=0;i<10;i++);
       scanf("%d",&a[i]);
    printf("\n");
    for(j=0;j<9;j++)
     for(j=0;j<9-j;i++)
      if(a[i]>a[i+1])
        {t=a[i];a[i];=a[i+1];a[i+1]=t;}
    printf(“the sorted number:\n”);
    for(i=0;i<10;i++)
       printf(“%d”,a[i]);
    printf(“\n”);
  return 0;
}

   } c语言
[解决办法]


#include <stdio.h>

int main(void)
{
    int arr[9];
    int temp, i, j;
    int swapped = 1;

// 初始化 
    for (i = 0; i <= 9; i++)
        arr[i] = 9 - i;

// 排序前 
    printf("Before Sort: ");
    for (i = 0; i <= 9; i++)
        printf("%d ", arr[i]);

// 冒泡排序 
    for (i = 0; swapped; i++) {
        swapped = 0;
        for (j = 0; j < 9 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = 1;
            }
        }
    }

// 排序后 
    printf("\n After Sort: ");
    for (i = 0; i <= 9; i++)
        printf("%d ", arr[i]);
    printf("\n");
    
    return 0;
}

Before Sort: 9 8 7 6 5 4 3 2 1 0
 After Sort: 0 1 2 3 4 5 6 7 8 9

[解决办法]
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void better_bubble_sort(int *D, int n) {
    int b,i,m,t;

    b=n-1;
    while (b) {
        m=0;
        for (i=0;i<b;i++) {
            if (D[i]>D[i+1]) {t=D[i];D[i]=D[i+1];D[i+1]=t;m=i;}
        }
        b=m;
    }
}
int main() {
    int d[10],n,i;

    srand(time(NULL));
    for (n=0;n<10;n++) {
        printf("------%d------\n",n);
        for (i=0;i<n;i++) {d[i]=rand()%100;printf(" %02d",d[i]);}
        printf("\n");
        better_bubble_sort(d,n);
        printf("sorted:\n",n);
        for (i=0;i<n;i++) {               ;printf(" %02d",d[i]);}
        printf("\n");
    }
}
//------0------
//
//sorted:
//
//------1------
// 87
//sorted:
// 87
//------2------


// 41 40
//sorted:
// 40 41
//------3------
// 21 03 02
//sorted:
// 02 03 21
//------4------
// 27 03 70 21
//sorted:
// 03 21 27 70
//------5------
// 02 50 57 77 34
//sorted:
// 02 34 50 57 77
//------6------
// 74 94 80 05 58 10
//sorted:
// 05 10 58 74 80 94
//------7------
// 50 43 98 36 90 83 73
//sorted:
// 36 43 50 73 83 90 98
//------8------
// 07 20 21 13 56 90 06 51
//sorted:
// 06 07 13 20 21 51 56 90
//------9------
// 14 94 94 32 14 24 81 32 00
//sorted:
// 00 14 14 24 32 32 81 94 94
//


[解决办法]
加个flag。。。
还有改良版的 鸡尾酒排序

热点排行