交换排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。

来源:互联网 发布:歌斐资产 知乎 编辑:程序博客网 时间:2024/05/20 02:54

冒泡排序:冒泡排序应该是最容易实现的一种排序算法了。原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大(升序)的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。
存在不足:就是本来位于前面的较小数被交换到后面。
在冒泡排序中,最重要的思想是两两比较,将两者较少的升上去
空间复杂度为O(1)
冒泡排序最坏情况的时间复杂度是O(n²)

void swap(int *a,int *b){    int temp;    temp=*a;    *a=*b;    *b=temp;}//升序void BubbleSort(int  *p, int length){    for (int i = 0; i < length; i++)    {        for (int j = 0; j < length - i - 1; j++)        {            if (p[j] > p[j + 1])            {                swap(p[j], p[j + 1]);            }        }    }}

快速排序:平均空间复杂度是O(log2n),最坏情况的空间复杂度是O(n)
平均时间复杂度是O(nlogn),最坏情况的时间复杂度是O(n²)
该方法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

#include<iostream>  using namespace std;  void quickSort(int s[], int l, int r)  {      if (l<r)    {        int i=l,j=r,x=s[l];        while (i<j)//执行完后返回括号里继续判定,判定为真继续执行语句直到括号里判定为假为止        {            while (i<j&&s[j]>=x)//从右往左找第一个小于x的数            j--;            if (i<j)            {                s[i++]=s[j];            }            while (i<j&&s[i]<x)//从左往右找第一个大于x的数            i++;            if (i<j)            {                s[j--]=s[i];            }        }        s[i]=x;        quickSort(s, l, i-1);        quickSort(s, i+1, r);    }}  int main()  {      int array[]={34,65,12,43,67,5,78,10,3,70},k;      int len=sizeof(array)/sizeof(int);     cout<<"The orginal arrayare:"<<endl;      for(k=0;k<len;k++)          cout<<array[k]<<",";      cout<<endl;      quickSort(array,0,len-1);      cout<<"The sorted arrayare:"<<endl;      for(k=0;k<len;k++)          cout<<array[k]<<",";      cout<<endl;      system("pause");      return 0;  }  
阅读全文
0 0
原创粉丝点击