常見的排序演算法(快排,歸併,插入等)

2021-10-03 15:09:33 字數 3504 閱讀 9048

一.氣泡排序

基本思想:每次比較陣列中相鄰兩個數的大小,將較小的數放在大的前面

void

bubblesort

(int

*a,int n)}}

}

第一次排序將最小的元素移動到第乙個位置,其他向後移動。第二次將最小的元素放在第二個位置,其他的元素向後移動,以此類推。

二.選擇排序

基本思想:每次選擇所要排序列中最小的元素,將其與前面沒有排過序的元素互換

void

selectsort

(int

*a,int n)

}//:最小值和第i個元素互換

a[pos]

= a[i]

; a[i]

= itemp;

}}

三.插入排序

基本思想:抽出乙個元素,在前面選擇合適的位置進行插入

void

insertsort

(int

*a,int n)

}}

四.交換法排序

基本思想:比較相鄰兩個元素的值,若前面的比後面大,則交換兩個元素

void

swapsort

(int

*a,int n)}}

}

五.快速排序

基本思想,選擇乙個值,將比他小的數放在他左邊,比他大的放他右邊,然後左右分別以同樣的方法繼續排序

void

quicksort1

(int

*a,int left,

int right)

while

((a[i]

<= pivot)

&& i < j)

//:從左端開始

i++;if

(i < j)

//:將比povit大的元素移動到右端

} a[i]

= pivot;

//:pivot移動到最終位置

quicksort1

(a, left, i -1)

;quicksort1

(a, i +

1, right);}

}

六.歸併排序

基本思想:採用分治法。將已有序的子串行合併,得到完全有序的序列。即先使每個子串行有

序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。

void

msort

(int

*a,int

*a,int left,

int right)

else

//:若第二個序列中的元素小,則將他放在臨時陣列中,同時二者標號都加1。第乙個序列begin標號不變

}while

(begin1 <= end1)

//:若只有乙個序列,則將他的元素按順序放到臨時陣列中

while

(begin2 <= end2)

//:若只有乙個序列,則將他的元素按順序放到臨時陣列中

memcpy

(a + left, a + left,

(right - left +1)

*sizeof

(int))

;//:將臨時陣列中的和原本陣列對應位置元素拷貝到原本陣列中

}void

mergesort

(int

*a,int n)

//:介面標準化

七.幾種排序演算法的完整**集合

#define _crt_secure_no_warnings 1

#include

#include

void

bubblesort

(int

*a,int n)}}

}void

selectsort

(int

*a,int n)

} a[pos]

= a[i]

; a[i]

= itemp;}}

void

swapsort

(int

*a,int n)}}

}void

insertsort

(int

*a,int n)}}

void

swapsort1

(int

* a,

int* b)

void

quicksort1

(int

*a,int left,

int right)

while

((a[i]

<= privot)

&& i < j)

i++;if

(i < j)

} a[i]

= privot;

quicksort1

(a, left, i -1)

;quicksort1

(a, i +

1, right);}

}void

msort

(int

*a,int

*a,int left,

int right)

else

}while

(begin1 <= end1)

while

(begin2 <= end2)

memcpy

(a + left, a + left,

(right - left +1)

*sizeof

(int))

;}void

mergesort

(int

*a,int n)

void

printarray

(int

* a,

int n)

printf

("\n");

}int

main()

;int n =

sizeof

(a)/

sizeof

(a[0])

;int left =0;

int right = n-1;

/*swapsort(a, n);

printarray(a, n);

selectsort(a, n);

bubblesort(a, n);

printarray(a, n);

insertsort(a, n);

printarray(a, n);

quicksort1(a, left, right);

printarray(a, n);

mid3(a, left, right);*/

mergesort

(a, n)

;printarray

(a, n)

;}

排序演算法 冒泡 插入 歸併 快排

整理了一下幾種常見的排序演算法,包括冒泡 插入 歸併 快排。還有另外幾種待整理 堆排序 希爾排序 桶排序 直接上 include include include using namespace std void swap int a,int b 最簡單的氣泡排序,時間複雜度o n n void bu...

排序演算法總結 插入 歸併 快排

void selectionsort int arr,int n swap arr minidx arr times times 對於近乎有序的陣列,排序效率很高,時間複雜度接近o n 基礎版 void insertionsort int arr,int n 優化版 減少不斷交換中的重複賦值 voi...

排序演算法 快排,歸併

從陣列中隨機選乙個數,比這個數大的放右邊,比這個數小的放左邊。快排中的乙個細節 如果乙個數等於p的時候,既可以在左邊又可以在右邊。這麼做是為了避免如果陣列中所有的數都一樣,則會造成資料的不平衡。快排的目的是能夠使得左邊和右邊的數都差不多,這樣的話時間複雜度就不會退化到o n 2 而是o n logn...