交换排序中主要有:冒泡排序和快速排序
(1)冒泡排序比较简单每次每次两两比较,权值小的就向上升。这样一趟下来,就会得到最小的,依次循环后就会得到有序数列。
for(int i=0;i<lenth-1;i++)
{
flag = 1;
for(int j=lenth-1;j>0;j--)
{
if(m_num[j] < m_num[j-1])
{
temp = m_num[j-1];
m_num[j-1] = m_num[j];
m_num[j] = temp;
flag = 0;
}
}
if(flag == 1) break;
}
(2)快速排序,这个在实现中的问题主要是防止递归中出现死循环。开始写的时候,由于交换条件交换条件写成m_num[j]<n,造成了死循环,在判断的时候只写了m_num[rear]>=n 而没有写head<rear,也造成了程序的死循环,由于循环的终止条件是head==rear,而且一旦交换,就会涉及坐标变化所以,所以对于head和rear的处理要特别注意。
int CChangeSort::Partition(int head,int rear)
{
double n = m_num[head];
while (head != rear)
{
while ((m_num[rear]>=n) && (head<rear))//head<rear
{
rear--;
}
if (head < rear)
{
m_num[head++] = m_num[rear];
}
while ((m_num[head]<=n) && (head<rear))
{
head++;
}
if (head < rear)
{
m_num[rear--] = m_num[head];
}
}
m_num[head] = n;
return head;
}
void CChangeSort::QuickSort(int head,int rear)
{
int n;
if (head < rear)
{
n = Partition(head,rear);
QuickSort(head,n-1);
QuickSort(n+1,rear);
}
}
快速排序是不稳定的算法,快速排序是目前基于比较的内部排序方法中速度最快的。
本文详细介绍了两种经典的交换排序算法——冒泡排序与快速排序。冒泡排序通过重复遍历待排序的数列,每次比较相邻两个元素并进行必要的交换来实现排序;快速排序则是一种分治算法,通过选取基准元素将数据分成两部分,一部分的所有数据都比另一部分的数据小,然后再按此方法递归地排序两部分。文章提供了具体的实现代码,有助于理解这两种排序算法的工作原理。
3171

被折叠的 条评论
为什么被折叠?



