选择、快速排序算法实现

排序算法在笔试面试中是常考的知识点之一,其中的选择排序和快排算法经常会要求面试者手写。由 于其代码量短小并且可以在短时间内考察出面试者的编程习惯和基本功。为了提高巩固自己的基本功,所以在此实现两个算法的源码,也供大家评阅:

//FileName: Sort Algorithm
//Author : WQP_Ya_Ping
//Date : 2016-5-13
//打印原数组
void Print_Arr(int *Array,int len)
{
    int i;

    for(i = 0; i < len ; i++)
    {
        printf("%d ", Array[i]);
    }
    printf("\n\n");
}
//快速排序
void QuickSort(int *Array, int l, int r)  
{  
    if (l < r)  
    {  
        int i = l, j = r, x = Array[l];  
        while (i < j)  
        {  
            while(i < j && Array[j] >= x) // 从右向左找第一个小于x的数 
                j--;    
            if(i < j)   
                Array[i++] = Array[j];  

            while(i < j && Array[i] < x) // 从左向右找第一个大于等于x的数 
                i++;    
            if(i < j)   
                Array[j--] = Array[i];  
        }  
        Array[i] = x;  
        QuickSort(Array, l, i - 1); // 递归调用 
        QuickSort(Array, i + 1, r);  
    }  
}
//选择排序
void SelectSort(int a[],int n)
{
   int temp,min;
   for(int i=0;i<n;i++)
   {
     min=i;//先假设最小下标为i
     for(int j=i+1;j<n;j++)
        if(a[j]<a[min])
           min=j;//对i之后的数进行扫描将最小的数赋予min
     if(min!=i)
     {
       temp=a[i];
       a[i]=a[min];
       a[min]=temp;
     }//判断min与i是否相等,若=则说明原假设正确反之交换数值
   }
}
//主函数
# include <stdio.h>
int main()
{
    int low = 0;
    int high = 9;
    int l = 0;
    int r = 9;
    int Array[] = {49,38,65,97,76,13,27,88,5,22};
    int len = sizeof(Array)/sizeof(Array[0]);
    printf("原数组为: ");
    Print_Arr(Array, len);


    printf("快速排序后数组为: ");
    QuickSort(Array,low, high);
    Print_Arr(Array, len);

    printf("选择排序后数组为: ");
    SelectSort(Array, len);
    Print_Arr(Array, len);
    return 0;
}

你可能感兴趣的:(面试,快速排序,选择排序,排序算法)