冒泡排序的改进

来源:互联网 发布:linux pyqt5 编辑:程序博客网 时间:2024/05/17 02:26
/*Name: BubbleSort Copyright: Author: huowolf Date: 05/07/15 16:18Description: 改进的冒泡排序的实现 */#include <iostream>using namespace std;#define len 7int arr[]={48,62,35,77,55,14,35,98};void BubbleSort(int a[],int length); void Output(int a[],int length);int main(){BubbleSort(arr,len); Output(arr,len);return 0;}void swap(int &a,int &b){ a=a^b; b=a^b; a=a^b;}void BubbleSort(int a[],int length){int i,j,lastExchangeIndex;i = length;while (i >0) // i>0 表明上一趟曾进行过记录的交换    {          lastExchangeIndex = 1;    for (j = 0; j < i; j++){    if (a[j+1]<a[j]) { swap(a[j+1],a[j]);        lastExchangeIndex = j;      }      }     i = lastExchangeIndex;// 一趟排序中无序序列中最后一个记录的位置} } void Output(int a[],int length){for(int i=0;i<=length;i++)cout<<a[i]<<"  "; }/*冒泡排序的改进基于以下两种思考:1.如果上面代码中,里面一层循环在某次扫描中没有执行交换,则说明此时数组已经全部有序列,无需再扫描了。因此,增加一个标记,每次发生交换,就标记,如果某次循环完没有标记,则说明已经完成排序。2.如果R[0..i]已是有序区间,上次的扫描区间是R[i..n],记上次扫描时最后一次执行交换的位置为lastExchangeIndex,则lastExchangeIndex在i与n之间,不难发现R[i..lastExchangeIndex]区间也是有序的,否则这个区间也会发生交换;所以下次扫描区间就可以由R[i..n] 缩减到[lastExchangeIndex..n]。 */

0 0
原创粉丝点击