C语言实现4种常用排序

实在没事搞,反正面试也要用到,继续来写4种排序算法。因为那天用java写了排序,突然想到我是要面试IOS,起码也得用C写。C竟然忘干净了,方法都不会写了。囧啊!

下面用C实现4种排序算法:快速排序、冒泡排序、选择排序、插入排序。(我是用Xcode写的)

1、快速排序

什么都不说了直接上代码吧:

#pragma -mark 快速排序
void quickSort(int array[],int low,int high)
{
    if (array == NULL) {
        return;
    }
    if (low >= high) {
        return;
    }
    
    //取中值
    int middle = low +(high - low)/2;
    int prmt = array[middle];
    
    //开始排序使得left < prmt 同时右边的大于 prmt
    int i = low,j = high;
    while (i <= j) {
        while (array[i] < prmt) {
            i++;
        }
        while (array[j] > prmt) {
            j--;
        }
        if (i <= j) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
            i++;
            j--;
        }
        
        printf("排序中:");
        printArray(array,7);
    }
    
    //对左边的进行排序处理
    if (low < j) {
        quickSort(array, low, j);
    }
    if (high > i) {
        quickSort(array, i, high);
    }
    
}
快速排序过程如下:

排序前:9 2 10 7 3 7 4 
排序中:4 2 10 7 3 7 9 
排序中:4 2 7 7 3 10 9 
排序中:4 2 7 3 7 10 9 
排序中:2 4 7 3 7 10 9 
排序中:2 4 3 7 7 10 9 
排序中:2 3 4 7 7 10 9 
排序中:2 3 4 7 7 9 10 
排序中:2 3 4 7 7 9 10 
排序后:2 3 4 7 7 9 10
2、冒泡排序

还是直接上代码吧,代码君在下面:

#pragma -mark 冒泡排序
void buddleSort(int *array,int length)
{
    if (array == NULL) {
        return;
    }
    
    for (int i = 1; i < length; i++) {
        for (int j = 0; j < length - i; j++) {
            if (array[j] > array[j+1]) {
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
            
            printf("排序中:");
            printArray(array,length);
        }
    }
}
冒泡排序的过程如下:

排序前:9 2 10 7 3 7 4 
排序中:2 9 10 7 3 7 4 
排序中:2 9 10 7 3 7 4 
排序中:2 9 7 10 3 7 4 
排序中:2 9 7 3 10 7 4 
排序中:2 9 7 3 7 10 4 
排序中:2 9 7 3 7 4 10 
排序中:2 9 7 3 7 4 10 
排序中:2 7 9 3 7 4 10 
排序中:2 7 3 9 7 4 10 
排序中:2 7 3 7 9 4 10 
排序中:2 7 3 7 4 9 10 
排序中:2 7 3 7 4 9 10 
排序中:2 3 7 7 4 9 10 
排序中:2 3 7 7 4 9 10 
排序中:2 3 7 4 7 9 10 
排序中:2 3 7 4 7 9 10 
排序中:2 3 7 4 7 9 10 
排序中:2 3 4 7 7 9 10 
排序中:2 3 4 7 7 9 10 
排序中:2 3 4 7 7 9 10 
排序中:2 3 4 7 7 9 10 
排序后:2 3 4 7 7 9 10 
3、选择排序

代码君,你在哪里:

#pragma -mark 选择排序
void selectSort(int array[],int length)
{
    if (array == NULL) {
        return;
    }
    int min_index;
    for (int i = 0; i< length; i++) {
        min_index = i;
        for (int j = i+1; j < length; j++) {
            if (array[j] < array[min_index]) {
                int temp = array[j];
                array[j] = array[min_index];
                array[min_index] = temp;
            }
            
            printf("排序中:");
            printArray(array,length);
        }
    }
    
}
选择排序的过程如下:

排序前:9 2 10 7 3 7 4 
排序中:2 9 10 7 3 7 4 
排序中:2 9 10 7 3 7 4 
排序中:2 9 10 7 3 7 4 
排序中:2 9 10 7 3 7 4 
排序中:2 9 10 7 3 7 4 
排序中:2 9 10 7 3 7 4 
排序中:2 9 10 7 3 7 4 
排序中:2 7 10 9 3 7 4 
排序中:2 3 10 9 7 7 4 
排序中:2 3 10 9 7 7 4 
排序中:2 3 10 9 7 7 4 
排序中:2 3 9 10 7 7 4 
排序中:2 3 7 10 9 7 4 
排序中:2 3 7 10 9 7 4 
排序中:2 3 4 10 9 7 7 
排序中:2 3 4 9 10 7 7 
排序中:2 3 4 7 10 9 7 
排序中:2 3 4 7 10 9 7 
排序中:2 3 4 7 9 10 7 
排序中:2 3 4 7 7 10 9 
排序中:2 3 4 7 7 9 10 
排序后:2 3 4 7 7 9 10

4、插入排序

继续上代码了:

#pragma -mark 插入排序
void insertSort(int array[],int length)
{
    if (array == NULL) {
        return;
    }
    for (int i = 1; i < length; i++) {
        int temp = array[i];
        int j = i-1;
        
        while (j >= 0 && array[j] > temp) {
            array[j+1] = array[j];
            j--;
            
            printf("排序中:");
            printArray(array,length);
        }
        array[j+1] = temp;
    }
    
}
插入排序的过程如下:

排序前:9 2 10 7 3 7 4 
排序中:9 9 10 7 3 7 4 
排序中:2 9 10 10 3 7 4 
排序中:2 9 9 10 3 7 4 
排序中:2 7 9 10 10 7 4 
排序中:2 7 9 9 10 7 4 
排序中:2 7 7 9 10 7 4 
排序中:2 3 7 9 10 10 4 
排序中:2 3 7 9 9 10 4 
排序中:2 3 7 7 9 10 10 
排序中:2 3 7 7 9 9 10 
排序中:2 3 7 7 7 9 10 
排序中:2 3 7 7 7 9 10 
排序后:2 3 4 7 7 9 10 
最后,附上整个类文件吧!

//
//  main.c
//  SortUtil
//
//  Created by Mac on 14-4-16.
//  Copyright (c) 2014年 KnightKing. All rights reserved.
//

#include <stdio.h>


//打印数组
void printArray(int *array,int len)
{
    for(int i = 0;i<len;i++){
        printf("%d ",array[i]);
    }
    printf("
");
}

#pragma -mark 冒泡排序
void buddleSort(int *array,int length)
{
    if (array == NULL) {
        return;
    }
    
    for (int i = 1; i < length; i++) {
        for (int j = 0; j < length - i; j++) {
            if (array[j] > array[j+1]) {
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
            
            printf("排序中:");
            printArray(array,length);
        }
    }
}

#pragma -mark 快速排序
void quickSort(int array[],int low,int high)
{
    if (array == NULL) {
        return;
    }
    if (low >= high) {
        return;
    }
    
    //取中值
    int middle = low +(high - low)/2;
    int prmt = array[middle];
    
    //开始排序使得left < prmt 同时右边的大于 prmt
    int i = low,j = high;
    while (i <= j) {
        while (array[i] < prmt) {
            i++;
        }
        while (array[j] > prmt) {
            j--;
        }
        if (i <= j) {
            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
            i++;
            j--;
        }
        
        printf("排序中:");
        printArray(array,7);
    }
    
    //对左边的进行排序处理
    if (low < j) {
        quickSort(array, low, j);
    }
    if (high > i) {
        quickSort(array, i, high);
    }
    
}

#pragma -mark 选择排序
void selectSort(int array[],int length)
{
    if (array == NULL) {
        return;
    }
    int min_index;
    for (int i = 0; i< length; i++) {
        min_index = i;
        for (int j = i+1; j < length; j++) {
            if (array[j] < array[min_index]) {
                int temp = array[j];
                array[j] = array[min_index];
                array[min_index] = temp;
            }
            
            printf("排序中:");
            printArray(array,length);
        }
    }
    
}

#pragma -mark 插入排序
void insertSort(int array[],int length)
{
    if (array == NULL) {
        return;
    }
    for (int i = 1; i < length; i++) {
        int temp = array[i];
        int j = i-1;
        
        while (j >= 0 && array[j] > temp) {
            array[j+1] = array[j];
            j--;
            
            printf("排序中:");
            printArray(array,length);
        }
        array[j+1] = temp;
    }
    
}

int main(int argc, const char * argv[])
{

    int a[] = {9,2,10,7,3,7,4};
    int length = 7;
    
    printf("排序前:");
    printArray(a,length);
    
    //快速排序
//    quickSort(a, 0, 6);
    //冒泡排序
//    buddleSort(a,length);
    //选择排序
//    selectSort(a, length);
    //插入排序
    insertSort(a, length);
    
    
    printf("排序后:");
    printArray(a,length);
    
    return 0;
}


原文地址:https://www.cnblogs.com/wanghang/p/6298901.html