最常用的排序算法,当然是快速排序算法了,下面给出可以直接运行的快速排序算法思想和代码:
思想:
①一般设置第一个数为基准数;
②先从右往左找一个小于基准数的数,在从左往右找一个比基准数大的数,然后交换他们;
继续,直到两边探测变量“相遇”;
③交换“相遇”位置的数字和基准数位置(即第一个数的位置),从而把基准数放置与中间位置;
④基准数左边:比基准数小,采用递归继续重复
⑤基准数右边:比基准数大,采用递归继续重复
话不多说,直接上码(c语言实现的):
#include "stdio.h"
/*
* 快速排序算法
*/
int n;
int a[100];
void quicksort();
int main(){
int i, j;
printf("请输入待排序的数的个数:");
scanf("%d", &n);
printf("请输入待排序的数列:");
for(i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
quicksort(0, n-1);
printf("排序后的数列为:");
for(i=0; i<n; i++)
{
printf("%d", a[i]);
}
return 0;
}
void quicksort(int startIndex, int endIndex)
{
int i, j, t;
int temp; //定义基准数
if(startIndex > endIndex)
return;
temp = a[startIndex];
i = startIndex;
j = endIndex;
while(i != j)
{
while(a[j]>=temp && i<j)
{
j--;
}
while(a[i]<=temp && i<j)
{
i++;
}
if(i<j)
{
t = a[j];
a[j] = a[i];
a[i] = t;
}
}
//基准数归位
a[startIndex] = a[i];
a[i] = temp;
quicksort(startIndex, i-1);
quicksort(i+1, endIndex);
return;
}
快速排序算法采用了递归的思想。