算法---快速排序。。

来源:互联网 发布:mysql数据库文件太大 编辑:程序博客网 时间:2024/06/05 05:23

第一次写博客,先来一篇 ,有什么见解, 大家帮帮忙!

今天看的快速排序----把过程写了一遍   一起学习下!


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);
}
0 0
原创粉丝点击