C语言基础 -24 数组_ 一维数组之排序

排序:冒泡排序;选择法;快速排序

冒泡与选择是常用的两种排序方式,快速是冒泡与选择的综合。

[root@localhost CH01]# cat mp_sort.c
#include <stdio.h>
#include <stdlib.h>
#define M 10

int main()
{
        int i;
        int arr[] = {1,2,3,4,5,6};
        printf("%d\n",sizeof(arr));
        printf("%d\n",sizeof(arr)/sizeof(arr[0]));
        exit(0);
}


[root@localhost CH01]# ./mp_sort
24
6
[root@localhost CH01]# cat mp_sort.c
#include <stdio.h>
#include <stdlib.h>
#define M 10

static void sort1(void)
{
        int i,j,tmp;
        int a[M] = {12,6,34,30,89,5,3,1,99,22};
        //M个数据,冒泡排序要排序M-1次

        for(i = 0; i < (M-1); i++)
        {
                printf("%d\t",a[i]);
        }
        printf("\n");

        for(i = 0; i < (M-1); i++)
        {
                for(j=0;j<(M-1-i);j++)
                {
                        if(a[j] > a[j+1])
                        {
                                tmp = a[i];
                                a[i] = a[j];
                                a[j] = tmp;
                        }
                }
        }
        for(i = 0; i < (M-1); i++)
        {
                printf("%d\t",a[i]);
        }
        printf("\n");
}

int main()
{
        sort1();
        exit(0);
}


[root@localhost CH01]# ./mp_sort   
12      6       34      30      89      5       3       1       99
1       5       12      30      34      89      6       99      3
#include <stdio.h>
 
#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/
 
/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (elemType arr[], int len) {
    elemType temp;
    int i, j;
    for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
        for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
            if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
}
 
int main (void) {
    elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
    int len = 10;
    int i;
     
    bubbleSort (arr, len);
    for (i=0; i<len; i++)
        printf ("%d\t", arr[i]);
    putchar ('\n');
     
    return 0;
}

 

[root@localhost CH01]# cat mp_sort.c
#include <stdio.h>
#include <stdlib.h>
#define M 10

static void sort1(void)
{
        int i,j,k,tmp;
        int a[M] = {12,6,34,30,89,5,3,1,99,22};
        //M个数据,冒泡排序要排序M-1次

        for(i = 0; i < sizeof(a)/sizeof(a[0]); i++)
        {
                printf("%d\t",a[i]);
        }
        printf("\n");

        for(i = 0; i < sizeof(a)/sizeof(a[0] - 1); i++) //外层循环定义总共比较多少次
        {
                k = i;
                for(j=i+1;j<sizeof(a)/sizeof(a[0]);j++) //内层循环定义每次循环该做什么动作
                {
                        if(a[j] < a[k])
                        {
                                k = j;
                        }
                        if(i != k)
                        {

                                tmp = a[i];
                                a[i] = a[k];
                                a[k] = tmp;
                        }
                }
        }
        for(i = 0; i < (sizeof(a)/sizeof(a[0])); i++)
        {
                printf("%d\t",a[i]);
        }
        printf("\n");
}

int main()
{
        sort1();
        exit(0);
}


[root@localhost CH01]# make mp_sort 
cc     mp_sort.c   -o mp_sort
[root@localhost CH01]# ./mp_sort    
12      6       34      30      89      5       3       1       99      22
1       3       5       6       12      22      30      34      89      99

猜你喜欢

转载自blog.csdn.net/f2157120/article/details/106725478
今日推荐