您的位置:首页 > 其它

排序算法

2014-03-03 20:07 357 查看
排序方法:



冒泡排序:

冒泡排序是所有排序算法中最简单最基本的一种,冒泡排序的思路就是交换交换排序,通过相邻元素的交换来达到排序的目的。

#include <iostream>
#include <ctime>
using namespace std;
void bubble1(int *arr,int n)
{
int tmp;
for (int i = 0; i < n-1; i++)
{
for (int j = i;j < n;j++)
{
if (arr[i]>arr[j])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}

void bubble2(int *arr,int n)
{
int tmp;
bool flag = true;
for (int i = 0; i < n-1; i++)
{
flag = false;
for (int j = i;j < n;j++)
{
if (arr[i]>arr[j])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
flag = true;
}
}
if (!flag)
break;
}
}

void bubble3(int *arr,int n)
{
int tmp;
bool flag = true;
for (int i = 0; i < n-1; i++)
{
flag = false;
for (int j = 0;j < n-1-i;j++)
{
if (arr[j]>arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
flag = true;
}
}
if (!flag)
break;
}
}

unsigned int comp(unsigned int a,unsigned int b)
{
unsigned int temp = 0;
if (a > b)
{
temp = a;
a = b;
b = temp;
}
return rand()%((b-a)+1);
}
int main()
{
srand(unsigned(time(NULL)));
int array[10] = {0};
for (int i = 0;i < 10; i++)
{
array[i] = comp(1,100);
cout<<"The original array["<<i<<"] = "<<array[i]<<" "<<endl;
}
bubble1(array,10);
//bubble2(array,10);
//bubble3(array,10);
for (int i = 0; i < 10; i++)
cout<<"The result of bubble sort array["<<i<<"] = "<<array[i]<<" "<<endl;
system("pause");
return 0;
}


快速排序:

快速排序和冒泡排序类似都是基于交换排序的思想,快速排序对马奥跑排序进行了改进从而提高了效率,时间复杂度为O(nlgn),最坏情况为O(n^2)

链接1链接2原理讲的很清楚

#include <iostream>
#include <ctime>
using namespace std;

void fastsort1(int p[],int a,int b)
{
if (a < b)
{
int i,j,x;
i = a;
j = b;
x = p[i];

while (i < j)
{
while (i < j&&x <= p[j])
j--;
if (i < j)
{
p[i++] = p[j];
}
while (i < j&&x >= p[i])
i++;
if (i < j)
{
p[j--] = p[i];
}
}
p[i] = x;
fastsort1(p,a,i-1);
fastsort1(p,i+1,b);
}
}

void fastsort2(int p[],int a,int b)
{
int i,j,t,element;
i = a;
j = b;
element = p[(a+b)/2];
while (i < j)
{
while (p[i] < element)
{++i;}
while(p[j] > element)
{--j;}
if (i <= j)
{
t = p[i];
p[i] = p[j];
p[j] = t;
++i;
--j;

}

}
if(i == j) {i++;}
if (a < j)
fastsort2(p,a,j);
if (i < b)
fastsort2(p,i,b);

}

unsigned int comp(unsigned int a,unsigned int b)
{
unsigned int temp = 0;
if (a > b)
{
temp = a;
a = b;
b = temp;
}
return rand()%((b-a)+1);
}
int main()
{
srand(unsigned(time(NULL)));
cout<<"Please enter the total number of the array ! "<<endl;
int n;
cin>>n;
if(n <= 0)return -1;
int *array = new int
;
memset(array,0,n*sizeof(int));
for (int i = 0;i < n; i++)
{
array[i] = comp(1,100);
cout<<"The original array["<<i<<"] = "<<array[i]<<" "<<endl;
}
//fastsort1(array,0,n-1);
fastsort2(array,0,n-1);
for (int i = 0; i < n; i++)
cout<<"The result of bubble sort array["<<i<<"] = "<<array[i]<<" "<<endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: