第一次写博客,先来一篇 ,有什么见解, 大家帮帮忙!
今天看的快速排序----把过程写了一遍 一起学习下!
void QuickSort(int a[],int l, int r )
{int i, j;
int temp;
if (l >= r) return;
//第一个位置为temp(temp = a[0]),所以可以将 0这个位置(i)拿来当每次交换的点
//假如 --第一次交换后, a[0] 被比temp小的值(j位置)占有则,该值的位置即j被拿来当
//下一次交换的位置。 当i=j是 则数组被分成以temp分界的两组数a[i] = temp
// 5 9 2 3 6 7 1
// i=0
// j=6
// temp = 5 我们可以将5给挖空,i=0为我们将要交换的位置
// 9 2 3 6 7 1
// i=0
// j=6
//现在从j开始出发 i < j成立,且a[6] = 1 > 5 不成立,
// 交换----a[i++] = a[j]:a[0] = a[6] i++, i=1
// 1 9 2 3 6 7
// i=1 j=6
//现在j = 6 的位置为下次要交换的位置,现在从i位置出发
// i<j成立 ,a[i] < temp 不成立 则交换, a[j--] = a[i]:a[6] = a[1] j--, j=5
// 1 2 3 6 7 9 1
// i=1 j=5
//现在i=1 的位置为要交换的位置
//i<j, a[j]=7 > temp(5)则j--
// 1 2 3 6 7 9 1
// i=1 j=4
//i<j, a[j]=6 > temp(5)则j--
// 1 2 3 6 7 9
// i=1 j=3
//i<j, a[j]=3 >temp(5)不成立
//则a[i++] = a[j],i=2
// 1 3 2 6 7 9
// i=2 j=3
//现在从i开始出发
// i<j , a[i]=2 <= temp,则i++,i=3
//现在i=j 所有条件都不成立
//a[i] = temp(5)
// 1 3 2 5 6 7 9
// i=3
// j=3
for(i = l, j = r, temp = a[i]; i < j; )
{
while(i < j && a[j] >= temp)
j--;
if (i < j) a[i++] = a[j];
while(i < j && a[i] <= temp)
i++;
if (i < j) a[j--] = a[i];
}
a[i] = temp;
QuickSort(a, l, i-1);
QuickSort(a, i+1, r);
}