C语言-排序方法(冒泡排序,选择排序,快速排序, 插入排序 )

/*
排序算法
*/ 
#include <stdio.h>

//冒泡排序 
void Bubble_sort(int *p_val, int size) {
    int j = 0; 
    int i = 0; 
    for (i = 0;i < size - 1;i++) {
        for (j = i;j < size - 1;j++) {
            if (*(p_val + j) > *(p_val + j + 1)) {
                *(p_val + j) ^= *(p_val + j + 1);
                *(p_val + j + 1) ^= *(p_val + j);
                *(p_val + j) ^= *(p_val + j + 1);
            }
        }
    }

}

//选择排序 
void choice_sort(int *p_val, int size) {
    int num = 0; 
    int num1 = 0; 
    for (num = 0;num < size - 1;num++) {
        for (num1 = num;num1 < size - 1;num1++) {
            if(*(p_val + num) > *(p_val + num1 + 1))         {
                *(p_val + num) ^= *(p_val + num1 + 1);     
                *(p_val + num1 + 1) ^= *(p_val + num);     
                *(p_val + num) ^= *(p_val + num1 + 1);             
            }
        }
    }

}

//快速排序 
void quick_sort(int* p_val, int size) {
    int base = *p_val; 
    int* p_head = p_val; 
    int* p_tail = p_val + size - 1; 
    if (size <= 1) {
        return; 
    }
    while (p_head < p_tail) {
        if (*p_head > *p_tail) {
            *p_head ^= *p_tail; 
            *p_tail ^= *p_head; 
            *p_head ^= *p_tail; 
            p_tail--; 
        }
        else {
            p_head++; 
        }
    }
    quick_sort(p_val, p_head - p_val/*左边存储区的个数*/); 
    //递归调用快速排序对右半边的数字进行排序 
    quick_sort(p_head + 1/*右半边最前面的存储区的地址*/, size - (p_head - p_val) - 1); 

}

//插入排序 
void insert_sort(int *p_val, int size) {
    int num = 0; 
    int num_1 = 0; 
    for (num = 1;num < size;num++) {
        for (num_1 = num;num_1 > 0;num_1--) {
            if (*(p_val + num_1) < *(p_val + num_1 - 1))          {
                *(p_val + num_1) ^= *(p_val + num_1 - 1);
                *(p_val + num_1 - 1) ^= *(p_val + num_1);
                *(p_val + num_1) ^= *(p_val + num_1 - 1);
            } 
        }
    }
}
int main(void) {
    int arr[5] = {7, 2, 3, 6, 5}; 
    quick_sort(arr, 5); 
    for (int i = 0;i < 5;i++) {    
        printf("%d ", arr[i]); 
    }
    printf("\n"); 
}

 

posted @ 2020-03-29 20:36  c语言我的最爱  阅读(803)  评论(0编辑  收藏  举报