1——快速排序,这里的容器是全局的,不全局的话,可以在参数那里加个数组的参数传进来。
从大到小:
//从大到小排序
void ResManage::quickSortLastUpdateTime(const int iLeftIndex, const int iRightIndex)
{
int iTempElement = m_qlTempRes.value(iLeftIndex).iLastUpdateTime; //暂存基准数
int iTempLeftIndex = iLeftIndex;//最左位置
int iTempRightIndex = iRightIndex;//最右位置
if(iLeftIndex > iRightIndex) //递归结束条件
{
return;
}
while (iTempLeftIndex != iTempRightIndex) //当iTempLeft和iTempRight不重合时
{
while(m_qlTempRes.value(iTempRightIndex).iLastUpdateTime <= iTempElement
&& iTempLeftIndex < iTempRightIndex)//从右往左寻找大于基准数的值
{
iTempRightIndex--;
}
while(m_qlTempRes.value(iTempLeftIndex).iLastUpdateTime >= iTempElement
&& iTempLeftIndex < iTempRightIndex)//从左往右寻找小于基准数的值
{
iTempLeftIndex++;
}
if(iTempLeftIndex < iTempRightIndex)
{
//找到了且i
原理:从序列的两端开始
(1)首先将最左边的数值作为基准数,应用2个变量iTempLeftIndex和iTempRightIndex
分别指向序列左端和右端;
(2)首先从iTempLeftIndex左往右寻找一个小于基准数的数,iTempRightIndex从右往左寻找一个大于2的数;
如果是从小到大的排序,就从左边往右找大于基数的数,从右边往左找小于基数的数。为什么这样,大家换个角度想想我们最后是要交换iTempLeftIndex、iTempRightIndex的值就可以想通了。
(3)找到了之后进行第一次交换,继续搜索;
(5)当iTempLeftIndex和iTempRightIndex都到了同一个位置后,表明第一轮交换结束,将基准数和iTempLeftIndex上的值进行交换,此时以iTempLeftIndex位置为分界线,左边的值都是大于iTempLeftIndex位置上的值,右边的值都是小于iTempLeftIndex上的值。
(6)最后调用递归分别处理左边序列和右边序列即可。
2——冒泡排序:从小打大
算法的思想:其实就是把每个值都和数组里面的值进行一遍比较(相邻位置)。
比如第一次循环:第一个值依次和后面值进行比较,比较完之后,最后一个位置的值一定是最大的。
第二次循环:第一个值依次和后面n-1个值进行比较,同理,比较完换值之后,倒数第二个位置的值是第二大的。
依次这样即可。
void bubbleSort(int a[], int n)
{
for(int i =0 ; i< n-1; ++i)
{
for(int j = 0; j < n-i-1; ++j)
{
if(a[j] > a[j+1])//从大到小的话,这里换成小于就可以了
{
int tmp = a[j] ; //交换
a[j] = a[j+1] ;
a[j+1] = tmp;
}
}
}
}
3——选择排序
void selestSort(int a[],int n)
{
int iMinIdex=0;//假设这个位置上的值就是最小的
int temp;
for(int i=0;i
思想:分成两列,未排序和已排序,第一次选出最小或最大的值放在排序的一边,下次在未排序的队列中找出最小或最大的值放入已排序的一边,如此循环即可。
4——插入排序的思想:
从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置,
重复步骤,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置后
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)