快速排序算法
来源:互联网 发布:mac yum install 编辑:程序博客网 时间:2024/04/27 20:46
快速排序算法是对冒泡排序算法的改进。它的基本思想是,通过一趟排序将序列分成两部分,其中一部分记录均比另一部分记录的值小。再分别对这两部分序列继续快速排序,以达到整个序列的有序。
在具体实现方法上是对序列data[s..t],以data[s]作为枢纽重新排列,把比data[s]大的都放到它前面,比data[s]小的都放到它后面,经过重新排列后s的位置也产生了变化,假设变为i(s<i<t)。之后再对data[s..i-1]和data[i+1..t]分别进行快速排序,直到整个序列有序。
下面看一下示范代码:
//-------------快速排序------------------------------------------
template<typename T>
void qkpass(T *data, int s,int t, int &i)
...{//一趟快速排序,将data[s..t]以data[s]为枢纽重新排列分成两部分
//一部分小于data[s],一部分大于data[s],s被移动到i的位置。
i = s;
T x = data[s]; //暂存data[s]
int j=t;
while( i < j )
...{
//从t倒退查找小于x的元素,找到后移动到序列的前面
while( i < j && data[j] >= x ) j--;
data[i] = data[j];
//从s开始向前找大于x的元素,找到后移动到序列的后面
while( i < j && data[i] <= x ) i++;
data[j] = data[i];
}
data[i] = x;
}
template<typename T>
void qksorti(T *data, int s,int t)
...{//快速排序递归过程,对data[s..t]进行快速排列
if( s < t )
...{
int k = 0;
//一趟排序,以位置k分成两部分,前面的全部小于data[k],后面的全部大于data[k]
qkpass( data, s, t, k );
//对k前面的元素再进行快速排序
qksorti( data, s, k-1 );
//对k后面的元素再进行快速排序
qksorti( data, k+1, t );
}
}
template<typename T>
void qksort(T *data, unsigned len)
...{//快速排序
qksorti( data, 0, len-1 );
}
//--------------end of快速排序--------------------------------
int _tmain(int argc, _TCHAR* argv[])
...{
int arr[] = ...{100,5,1,3,11,3,6,-1};
qksort( arr, sizeof(arr)/sizeof(arr[0]) );
return 0;
}
template<typename T>
void qkpass(T *data, int s,int t, int &i)
...{//一趟快速排序,将data[s..t]以data[s]为枢纽重新排列分成两部分
//一部分小于data[s],一部分大于data[s],s被移动到i的位置。
i = s;
T x = data[s]; //暂存data[s]
int j=t;
while( i < j )
...{
//从t倒退查找小于x的元素,找到后移动到序列的前面
while( i < j && data[j] >= x ) j--;
data[i] = data[j];
//从s开始向前找大于x的元素,找到后移动到序列的后面
while( i < j && data[i] <= x ) i++;
data[j] = data[i];
}
data[i] = x;
}
template<typename T>
void qksorti(T *data, int s,int t)
...{//快速排序递归过程,对data[s..t]进行快速排列
if( s < t )
...{
int k = 0;
//一趟排序,以位置k分成两部分,前面的全部小于data[k],后面的全部大于data[k]
qkpass( data, s, t, k );
//对k前面的元素再进行快速排序
qksorti( data, s, k-1 );
//对k后面的元素再进行快速排序
qksorti( data, k+1, t );
}
}
template<typename T>
void qksort(T *data, unsigned len)
...{//快速排序
qksorti( data, 0, len-1 );
}
//--------------end of快速排序--------------------------------
int _tmain(int argc, _TCHAR* argv[])
...{
int arr[] = ...{100,5,1,3,11,3,6,-1};
qksort( arr, sizeof(arr)/sizeof(arr[0]) );
return 0;
}
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- WinCE BSP中OAL层中的OEMIoControl介绍
- VC中调用WebService的超时设置
- How to generate a log file in VC++ or Embedded VC++ (For Pocket PC or WinCE devices)
- 更快、更强 64位编程的三十二条军规
- poi实现从数据库到excel的导出。
- 快速排序算法
- 选择排序算法
- 冒泡排序算法
- 获取本机IP地址列表
- TCP连接个数限制及调整方法
- Linux信号量编程实例
- Linux多线程及临界区编程例解
- XML 资源
- 易语言和C++合用也比较爽