Test Header HTML Code

冒泡排序与快速排序

交换排序包括直接选择排序与快速排序两类

一,冒泡排序

    估计是大家做练习题,笔试最多的排序算法了.

   

代码
void bubbleSort(int data[], int len)
{
for(int i = 1; i <= len - 1; i++) //每交换一轮,均会有一个最大的冒泡到最右边.
{
for(int j = 0; j < len - 1; j++)
{
if(data[j] > data[j + 1])
{
int tmp = data[j];
data[j]
= data[j + 1];
data[j
+ 1] = tmp;
}
}
}
}

 

代码
void bubbleSort(int data[], int len)
{
//利用标志位来控制循环早点结束,若遍历一次交换次数为0说明是有序的,可以提前结束.
bool swapped = true;
while(swapped)
{
swapped
= false;
for(int j = 0; j < len - 1; j++)
{
if(data[j] > data[j + 1])
{
int tmp = data[j];
data[j]
= data[j + 1];
data[j
+ 1] = tmp;
swapped
= true;
}
}
}
}

 

 

 

二,快速排序

   目前比较流行,也是公认较好的排序算法,其利用了分治的算法思想,首先选取一个pivot,将小于pivot的记录放在左边,其余放在右边,并不断递归对左右两边的序列进行快速排序.

代码
void quickSort(int data[], int left, int right)
{
if(left >= right) return;
int pivotIndex = (left + right)/2;
pivotIndex
= partition(data, left, right, pivotIndex);
quickSort(data, left, pivotIndex
- 1);
quickSort(data, pivotIndex
+ 1, right);
}
//将小于data[pivotIndex]的放在左边,其余放在右边,并返回中间位置
int partition(int data[], int left, int right, int pivotIndex)
{
int storeIndex = left;
int pivot = data[pivotIndex];
data[pivotIndex]
= data[right];
data[right]
= pivot;
for(int i = left; i < right; i++)
{
if(data[i] < pivot)
{
int tmp = data[storeIndex];
data[storeIndex]
= data[i];
data[i]
= tmp;
storeIndex
++;
}
}
data[right]
= data[storeIndex];
data[storeIndex]
= pivot;
return storeIndex;
}

 

posted on 2010-04-01 01:16  宁静的水泡  阅读(448)  评论(0编辑  收藏  举报

导航

Test Rooter HTML Code