数组冒泡排序并记录原有位置


#include <stdio.h>
 
/* 常规冒泡排序 */
void BubbleSort(int a[], int n)
{
    int i = 0;
    int j = 0;
    int tmp = 0;
 
    for (i = 0; i < n - 1; ++i)
    {
        for (j = 1; j < n - i; ++j)
        {
            if (a[j] > a[j-1])   /* 从大到小排序,把较小的交换到后面来 */
            {
                tmp = a[j-1];
                a[j-1] = a[j];
                a[j] = tmp;
            }
        }
    }
}
 
 
/* 冒泡排序,并记录原有位置 */
/*a[] 待排序数组;n 数组元素个数; position[] 记录a[]排序前位置 */
void BubbleSortTest(int a[], int n, int position[])
{
    int i = 0;
    int j = 0;
    int tmp = 0;
 
    for (i = 0; i < n - 1; ++i)
    {
        for (j = 1; j < n - i; ++j)
        {
            if (a[j] > a[j-1])    /* 从大到小排序,把较小的交换到后面来 */
            {
                tmp = a[j-1];
                a[j-1] = a[j];
                a[j] = tmp;
 
                /* 记录位置 */
                tmp = position[j-1];
                position[j-1] = position[j];
                position[j] = tmp;
            }
        }
    }
}
 
 
int main(void)
{
    int i = 0;
    int a[5] = {11,222,33,444,5};/* 测试数组 */
    int b[5];/* 记录位置 */
 
    for (i = 0; i < 5; i++)
    {
        b[i] = i;
    }
 
    for (i = 0; i < 5; i++)
    {
        printf("a[%d] = %d\n", i, a[i]);
    }
 
    printf("Hello World!\n");
 
    BubbleSortTest(a, 5, b);
 
    for (i = 0; i < 5; i++)
    {
        printf("position = %d, a[%d] = %d\n", b[i], i, a[i]);
    }
 
    return 0;
}
 
 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页