冒泡排序(Bubble Sort):一种交换排序,两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
#include<iostream>
using namespace std;
//冒泡排序,加上改进优化
int bubbleSort(int* arr,int length); //成功返回0,失败返回-1
void swap(int& elem1,int& elem2);
void test();
void printArr(int* arr,int length);
int bubbleSort(int* arr,int length)
{
if(NULL==arr||length<=0)
return -1;
int swapFlag = true;
for(int idx=0;idx!=length&&swapFlag;++idx)
{
swapFlag = false; //初始为false
for(int iidx=0;iidx!=(length - 1 - idx);++iidx) //每一次都会冒泡选择出一个最大的元素放在最后的位置
{ //(length - 1 - idx)因为每次都是iidx和iidx+1相比较
if(arr[iidx]>arr[iidx+1])
{
swap(arr[iidx],arr[iidx+1]);
swapFlag = true; //发生元素交换,改成true
}
}
}
return 0;
}
void swap(int& elem1,int& elem2)
{
int tmp = elem1;
elem1 = elem2;
elem2 = tmp;
}
|
void printArr(int* arr,int length)
{
if(NULL==arr||length<=0)
return ;
for(int idx=0;idx!=length;++idx)
{
cout<<arr[idx]<<" ";
}
cout<<endl;
}
void test()
{
int arr[] = {6,5,3,1,8,7,2,4};
printArr(arr,8);
bubbleSort(arr,8);
printArr(arr,8);
cout<<endl;
int arr1[] = {1,2,3,4,5,6,7,8};
printArr(arr1,8);
bubbleSort(arr1,8);
printArr(arr1,8);
cout<<endl;
int arr2[] = {2,2,2,2};
printArr(arr2,4);
bubbleSort(arr2,4);
printArr(arr2,4);
cout<<endl;
int arr3[] = {2,2,1,2};
printArr(arr3,4);
bubbleSort(arr3,4);
printArr(arr3,4);
cout<<endl;
int* arr4 = NULL;
printArr(arr4,4);
bubbleSort(arr4,4);
printArr(arr4,4);
cout<<endl;
}
int main()
{
test();
system("pause");
|