冒泡排序法改进

void BubbleSort(int a[], int n)
{
    int m = n -1;
    int nFalg = 0;
    int count = 0;
    while ( m > 0)
    {
        printf("第%d次冒泡\n", ++count);
        for (int j = 0; j < m; ++j)
        {
            if (a[j] > a[j + 1])
            {
                int c = a[j];
                a[j] = a[j + 1];
                a[j + 1] = c;

        nFalg = j;
      }
    }

    m = nFalg;
  }
}

void BS( int a[],int n)
{
int nfalg = 0;
int m = n -1;
int count = 0;
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < m; ++j)
{
if (a[j] > a[j + 1])
{
int c = a[j];
a[j] = a[j + 1];
a[j + 1] = c;
nfalg = j;
}
}
m = nfalg;
printf(“m = %d\n”, m);
printf(“第%d次冒泡\n”, ++count);
}
}

//选择排序 从无序序列里面选一个最大的或者最小的替换有序序列最后一个位置
void SelectSort(int a[], int n)
{
int k = 0;
for ( int i = 0; i < n -1 ; ++i)
{
k = i;
for ( int j = i + 1; j < n; ++j)
{
if (a[j] < a[k])
{
k = j;
}
}
if ( i != k)
{
int c = a[i];
a[i] = a[k];
a[k] = c;
}
printf(“\n第%d趟排序:\n”, i + 1);
for ( int m = 0; m < n; ++m)
{
printf(“%d “, a[m]);
}
}
}

//插入排序 从无序序列里面选出一个数 与有序列从后往前做比较
void InsertSort(int a[], int n)
{

for ( int i = 1; i < n ; ++i)
{
    for ( int j = i; j>0; --j)
    {
        if (a[j] < a[j - 1])
        {
            int c = a[j - 1];
            a[j - 1] = a[j];
            a[j] = c;
        }
    }

    /*
    int j = i;
    while (j > 0 && (a[j] < a[j - 1]))
    {
        int c = a[j - 1];
        a[j - 1] = a[j];
        a[j] = c;
        j--;
    }
    */

    printf("\n第%d趟排序:\n", i );
    for (int m = 0; m < n; ++m)
    {
        printf("%d ", a[m]);
    }
}

}

int main()
{
int a[7] = { 5,2,3,1,9,7,8 };

//BubbleSort(a, 7);
//BS(a);

int b[7] = { 49,38,65,97,76,13,27 };
InsertSort(b, 7);

printf("\n\n结果:");
for ( int i = 0; i < 7; ++i)
{
    printf("%d ", b[i]);
}

getchar();
unsigned char c[1];
int n = 126;
itoa(n, (char*)c, 16);


return 0;

}

猜你喜欢

转载自blog.csdn.net/djb100316878/article/details/81287529
今日推荐