1、冒泡法,相邻的两个数值,进行比较,满足条件的进行互换

#include <stdio.h>
int main() {
    int index, j, tmp;
    int arr[] = {1, 333, 33,55};
    for(index=0; index<4; index++) {
        for(j=3; j>index; j--) {
            if (arr[j] < arr[j-1]) {
                tmp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = tmp;       
        
            }
        }
    }
    for(index=0; index<4; index++) {
        printf("%d\t", arr[index]);
    }
    return 0;
}

 

 

交换排序法

/** * 简单的交换排序

  * 冒泡排序初级版

  *这个不算是标准的冒泡排序算法,因为不满足“两两比较相邻记录”的冒泡排序思想,她更应该是最最简单的交换排序而已

  * 思路:让每一个关键字和她后面的“每一个”关键字比较,如果大则交换

  缺点:效率很低

*/

#include <stdio.h>
int main() {
    int arr[6];
    int tmp, i, j;
    for(i=0; i<6; i++) {
        scanf("%d", &arr[i]);
    }
    
    for(i=0; i<6; i++) {
        for(j=i; j<5; j++) {
            if (arr[i]<arr[j+1]) {
                tmp = arr[i];
                arr[i] = arr[j+1];
                arr[j+1] = tmp;    
            }
        }
    }
    for(i=0; i<6; i++) {
        printf("\n%ld\t", arr[i]);
    }
    return 0;
}

 

3、选择法

在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

#include <stdio.h>
int main() {
    int arr[6];
    int tmp, i, j, min;
    for(i=0; i<6; i++) {
        scanf("%d", &arr[i]);
    }
    

    for(i=0; i<6; i++) {
        min = i;
        for(j=i; j<5; j++) {
            if (arr[min]>arr[j+1]) {
                min = j+1;  
            }
        }
        if (i != min ) {
            tmp = arr[i];
            arr[i] = arr[min];
            arr[min] = tmp;
        }
    }
    for(i=0; i<6; i++) {
        printf("\n%ld\t", arr[i]);
    }

    return 0;
}