常見的排序演算法總結

2021-08-18 15:34:57 字數 2434 閱讀 1107

#include/*演算法只是比較了元素為整數的內容.大部分的排序只是做了簡單的測試.僅供參考.*/

void swap(int *a , int *b)

bool less(int a, int b)

//對內部中的元素先找到k值,然後分兩塊

int partition(int *r, int lo, int hi)

while(j>i &&r[i]i)

} r[i] = temp;

}return i;

}//1.快速排序,也是把陣列分成兩個陣列,當兩個陣列有序的時候,整個陣列的有序

void quicksort(int *r, int lo, int hi)

//快速排序測試

void testquicksort()

; int len = sizeof(unorder)/sizeof(int);

quicksort(unorder, 0, len-1);

for(int i =0 ;i< len;i++)

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

}//2.冒泡本質上是一種交換排序

void buble_sort(int *r, int n) }

if(flag == 0)

return ;

}}//二路歸併,

void merge(int *r,int *ch, int lo,int mid, int hi)

int i =lo; int j = mid+1;

printf("start %d, start %d \n",i,j);

for(int k = lo; k <= hi; k++)

}/** 3.二路歸併排序

* 把整個陣列分成子陣列,對子陣列排序後,將有序的子陣列歸併已將整個陣列排序

* */

void mergersort(int *r,int *temparray ,int lo, int hi)

void testmergesort()

; //5,41,3,9,44,21,65,

int len = sizeof(unorder)/sizeof(int);

int *temparray = new int(len);

mergersort(unorder, temparray, 0, len-1);

for(int i =0 ;i< len;i++)

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

delete temparray;

}//基於插入排序的快速排序演算法

/*4.shell排序是不穩定的,增量要求沒有除1外的公因子.

* */

void shellsort(int *r, int n)

r[j+h] = temp;

} h = h/3;

}}//5.選擇排序

void selectsort(int *r, int n)

r[j+1] = temp; //放在當前位置

}}/*

class sortcompare

void random

}*/

//測試插入排序

void testinsert()

; int n = sizeof(r)/sizeof(int);

insertsort(r, n);

for(int i =0 ;i=1; i--)

//進行排序

for(int j = n; j>=2; j--)

}void testheapsort()

; int n = sizeof(r)/sizeof(int);

heapsort(r, 6);

for(int i =0 ;i}//8.計數排序

//9.基數排序:桶排序每次以0-9排序,從個位到最高位

//10.折半插入排序:對乙個有序的序列進行折半查詢然後插入

//時間複雜度:快排,希爾排序,歸併排序和堆排序,是nlog(n) (快些以nlog(n) 歸隊)

//而空間複雜度:快速排序是o(log(n)), 歸併排序是o(n), 基數排序是o(r_d),其他都是o(1);// 當然直接插入容易變成o(n),而冒泡最好是o(n).以上兩個是"容易插","起的好"

//其他細節:1.經過一趟排序可以達到最後位置:交換類(冒泡,快速), 選擇類(堆排序, 簡單選擇排序).

// 2.排序方法的元素次數和原始序列無關-----簡單選擇排序和折半插入排序

// 3.排序方法與排序趟數和原始序列有關-----交換類排序(冒泡,快速)

//穩定性來說:快速排序, 希爾排序, 選擇排序, 堆排序是不穩定的,其他穩定.(心情不穩定,快些選堆朋友聊天)

int main(int argc, char **argv)

常見的排序演算法總結

平時一直做專案,業務邏輯,對演算法這塊逐漸有了生疏 今天有空總結一下排序演算法 1 氣泡排序 氣泡排序的原理就是兩兩相比,從小到大的話前面比後面大就交換,從大到大的話前面比後面小就交換,比如有一組數 1,10,5,3,2 如何對它做排序 比如從小到大 第一步 1,10,5,3,2 源資料 1,10,...

常見的排序演算法總結

氣泡排序最常見版 void bubblesort int array,size t len int main bubblesort array,6 for size t i 0 i 6 i cout endl void bubblesort int array,size t len int main...

常見的排序演算法總結

1.氣泡排序 就像冒泡一樣,從頭對比相鄰的兩個,大的 或者小的 就交換到後面,一直到序列有序。時間複雜度最壞,平均o n 2 最好的時候是初始序列有序,第一趟後就不在發生交換,停止排序時間複雜度o n 空間複雜度為o 1 a 11 2,41 7,22 80,67 1,0.1,88 def bubbl...