快速排列的思想很牛逼
这里应该有非常丰富的解释:点击打开链接
//来一个快速排序。
#include<stdio.h>
void sort (int *a,int left,int right)
{
if (left >= right){ //如果左边索引大于等于右边的索引就代表已经整理完成了一个组了
return;
}
int i = left;
int j = right;
int key = a[left];
while (i < j){ //控制在当组内寻找一遍
while (i < j&&key <= a[j]){ //而寻找的条件就是1.找个小于或者大于key的数(大于或小于取决于是
j--; //升序还是降序)2.没有符合条件1的,并且i与j的大小没有反转;
} //j -- 表示向前寻找
a[i] = a[j]; //当找到了这样一个数的时候就把他赋给了前面被拿走的i的值
//如果是第一次循环且key是a[left],那么就是给key
while (i < j&&key >= a[i]){ //这是i在当前组内向前寻找,同上,不过左右两边的数大小与key的关系相反。排序的思想主要是把数往两边扔
i ++;
}
a[j] = a[i];
}
a[i] = key; //当在当前组内找完一遍时,就把中间数key回归
sort(a,left,i-1); //最后用同样的方式对左边分出来的小组进行同上的做法
sort(a,i+1,right); //最后用同样的方式对右边分出来的小组进行同上的做法
//当然最后可能会出现很多的左右,直到每一组的i=j为止
}
int main()
{
int a[10] = {9,8,7,6,5,4,3,2,1,0};
sort(a,0,9);
int i;
for (i = 0;i < 10;i ++)
printf("%d",a[i]);
return 0;
}