排序算法

来源:互联网 发布:经纬度距离计算器软件 编辑:程序博客网 时间:2024/06/04 19:48

排序方法:


冒泡排序:

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

#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[n];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;}


0 0
原创粉丝点击