zoukankan      html  css  js  c++  java
  • 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;
    }


  • 相关阅读:
    vue3_10 吴小明
    ios圆角属性失效的解决办法 吴小明
    vue3_07 吴小明
    vue3_04 吴小明
    vue3_08 吴小明
    vue3_09 吴小明
    vue指定返回键的路由(点击浏览器的返回按钮/beforeRouterLeave) 吴小明
    Object.assign() 吴小明
    vue中使用lodash的debounce(防抖函数) 吴小明
    读雪中悍刀行有感
  • 原文地址:https://www.cnblogs.com/wanghang/p/6298901.html
Copyright © 2011-2022 走看看