一.氣泡排序
基本思想:每次比較陣列中相鄰兩個數的大小,將較小的數放在大的前面
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...