冒泡排序与快速排序

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

一,冒泡排序

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

   

代码
   
     
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;
}

 

你可能感兴趣的:(冒泡排序)