排序算法在筆試面試中是常考的知識點之一,其中的選擇排序和快排算法經常會要求面試者手寫。由 於其代碼量短小並且可以在短時間內考察出面試者的編程習慣和基本功。爲了提高鞏固自己的基本功,所以在此實現兩個算法的源碼,也供大家評閱:
//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;
}