自己關於排序的總結

2021-05-17 16:41:20 字數 2424 閱讀 6528

所有排序的總結:

1、插入排序

插入排序是最簡單最直觀的排序演算法了

,它的依據是

:遍歷到第

n個元素的時候前面的

n-1個元素已經是排序好的了

,那麼就查詢前面的

n-1個元素把這第

n個元素放在合適的位置

,如此下去直到遍歷完序列的元素為止.

插入排序是最簡單最直觀的排序演算法了

,它的依據是

:遍歷到第

n個元素的時候前面的

n-1個元素已經是排序好的了

,那麼就查詢前面的

n-1個元素把這第

n個元素放在合適的位置

,如此下去直到遍歷完序列的元素為止.

演算法的複雜度也是簡單的

,排序第乙個需要

1的複雜度

,排序第二個需要

2的複雜度

,因此整個的複雜度就是

1 + 2 + 3 + ... + n = o(n ^ 2)

的複雜度.

// 插入排序

void insertsort(int array, int length)

// 在合適位置安放當前元素

array[j + 1] = key; }

}2、選擇排序:

每次確定乙個數字,這個數字是後面所有數的最小值放到這個位置

void selectinsert(int *arr) }

int temp=arr[i];

arr[i]=arr[index];

arr[index]=temp;}}

3、堆排序:

//heap sort

堆排序,用乙個二插堆,大根堆即可

//heap[0]

是臨時元素,作臨時變數用途;heap[1 -- n]是實際的大根堆的資料記憶體空間

#include

#include

#include

#include

const

intmax=100004;

void

swap(int &a,int &b)

//注意傳引用

void

buildheap(int* arr,int

len)

//o( n*lg(n) )

else

if( t==arr[j*2+1] )

else

break;

//退出while}

} }void

adjustheap(int* arr,intl)

else

if( t==arr[i*2+1] )

else

break;

//退出while}

} void

heapsort(int* arr,int

len)

for(i=1;i

printf("%d ",arr[i]);

printf("%d/n",arr[i]);

} int

main()

4、歸併排序:

//n*lg(n)

複雜度,因為一層整個葉子是

//n,

然後一共有

lg(n)

層int

temp[max];

//因為有歸併的過程,所以不是內排序,需要另外開闢這個儲存陣列空間

void

merge(int* arr,int

start,int

mid,int

end)

if( i2>end )

if( arr[i1]>arr[i2] )

else }

for(i=start,cnt=0;i

<=end;i++)

arr[i]=temp[cnt++]; }

void

mergesort(int* arr,int

start,int

end)

//歸併排序

} 5、快速排序:

qsort

注意那個桶倒來倒去的過程和辦法即可

6、氣泡排序有個優化就是if(a[i]>a[i+1])的時候記錄 i 的值temp,內層的迴圈只要迴圈到這個temp值即可,因為後面的是有序的。

總結上述的排序演算法:

穩定的討論就是說按照同樣的數字進行原序的排序

自然選擇排序和插入排序太慢,用起來不爽

那麼就討論下

歸併,堆排和快排

快排有退化

就是o(n^2)

但是不用第乙個,而是每次用隨機演算法選擇數能改進這個演算法的最壞複雜度,而且快排不穩定

…歸併排序,是非內部排序,需要另外開闢空間處理,但是是穩定的,用來處理逆序數很強大

而堆排是不穩定的,但是是內部排序,並且沒退化,處理大資料來說非常好的

關於遞迴自己的總結

最近可能是旁邊各種人都準備找工作的事情,讓我也感覺有一些慌張了,甚至有的時候我都不知道我學計算機是真正的喜歡還是為了找工作 好在最近自己思考了一下,並且飛餅同學讓我知道了一些事情,她說的一句話我很喜歡,就當我畢生要完成的事情 平靜地承認自己的不足,並解釋不足的原因,讓自己像秤砣一樣穩穩地沉下去,回到...

關於排序的總結

在資料結構中講了一些基本的排序方法,在此做乙個總結。1 插入排序 這種排序是每一趟都在找某個帶插入元素的位置,找到之後插入到待插入的點。1 直接插入排序 這種方法是從陣列的第乙個元素依次到最後乙個元素,當當前為第i個元素時,和前面的元素逐個相比較,以找到其在前面i 1個元素當總的位置然後插入。演算法...

關於排序的總結

概念 排序是按關鍵字的非遞減或非遞增順序對一組記錄重新進行排序的操作。主要目的是為了便於查詢。穩定性 假設起始狀態a b,且a在b的前面,經過排序之後如果a仍然在b之前,則這種排序是穩定的,否則稱為不穩定排序。不能說不穩定排序的方法不好,各有各的使用場景。分類 插入排序 直接插入排序 理解 從第二個...