快速排序算法C实现
程序员文章站
2024-03-17 09:39:58
...
快速排序是大规模递归的算法,它比大部分排序算法都要快。一般用于数据个数比较多的情况。尽管可以在某些特殊的情况下写出比快速排序快的算法,但是就通常情况而言,没有比它更快的了。快速排序是递归的,对于内存非常有限的机器来说,它不是一个好的选择。
#include <stdio.h>
#include <stdlib.h>
/*
快速排序算法学习
*/
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void quickSort(int arr[] ,int start, int end)
{
int arrBase, arrMiddle;
int tempStart = start,
tempEnd = end;
//对于这种递归的函数,内部必须要有一个函数返回的条件
if(tempStart >= tempEnd)
return;
//拷贝一个基准值作为后面比较的参数
arrBase = arr[start];
while(start < end)
{
while(start < end && arr[end] > arrBase)
end--;
if(start < end)
{
swap(&arr[start], &arr[end]);
start++;
}
while(start < end && arr[start] < arrBase)
start++;
if(start < end)
{
swap(&arr[start], &arr[end]);
end--;
}
}
arr[start] = arrBase;
arrMiddle = start;
//分治方法进行递归
quickSort(arr,tempStart,arrMiddle-1);
quickSort(arr,arrMiddle+1,tempEnd);
}
int main()
{
int myArr[] = {12,13,15,20,0,-1,-10,100};
int arrLength = sizeof(myArr)/sizeof(int);
quickSort(myArr,0,arrLength-1);
for(int i = 0; i<arrLength; i++)
printf("%5d",myArr[i]);
return 0;
}
``