1. 程式人生 > >總結一下常用的排序

總結一下常用的排序

比較大小 快速排序 冒泡排序 ring urn 復雜度 space 比較 qsort

最近學習了幾種排序,想要記錄下來

(一)冒泡排序:

#include<cstdio>
#include<cstring>
#define Max 1001
using namespace std;

int main()
{
int A[Max]={10,43,48,1,8,3,5,7,1,-21},t;
for(int i=0;i<10-1;i++)
for(int j=0;j<10-i-1;j++) //因為後面j加1,所以先要減1
if(A[j]>A[j+1]) //前面的數與後面的數比較大小
{
t=A[j];
A[j]=A[j+1];
A[j+1]=t;
}


for(int i=0;i<10;i++)
printf("%d ",A[i]);
return 0;
}

總結:冒泡排序是一種用時間換空間的排序方法,時間復雜度為O(N^2)。

(二)選擇排序:

#include<cstdio>
#include<cstring>
#define Max 1001
using namespace std;

int main()
{
int A[Max]={10,43,48,1,8,3,5,7,1,-21},t,min;
for(int i=0;i<10-1;i++)
{
int index=i;
min=A[i];
for(int j=i+1;j<10;j++)
if(min>A[j])
{
min=A[j];
index=j;
}
t=A[i];
A[i]=min;
A[index]=t;
}


for(int i=0;i<10;i++)
printf("%d ",A[i]);
return 0;
}

總結:選擇排序的平均時間復雜度為O(N^2)。

註:以上兩種排序方法因為隨機復雜度打,所以現在很少使用。

(三)快速排序:

#include<cstdio>
#include<cstring>
#define Max 1001
using namespace std;

void QSort(int left,int right,int *A)
{
if(left>right)return;
int i=left;
int j=right;
int key=A[left];
while(i<j)
{
while(i<j&&key<=A[j])j--;
A[i]=A[j];
while(i<j&&key>=A[i])i++;
A[j]=A[i];
}
A[i]=key;
QSort(left,i-1,A);
QSort(i+1,right,A);
}

int main()
{
int A[Max]={10,43,48,1,8,3,5,7,1,-21};

QSort(0,9,A);

for(int i=0;i<10;i++)
printf("%d ",A[i]);
return 0;
}

總結:快速排序的時間復雜度為O(N),也是我最喜歡用的一種排序方法。

以上有什麽錯誤還望指出,希望我們共同學習。

總結一下常用的排序