一、氣泡排序:
二 、直接選擇排序:
三、直接插入排序:
四、希爾排序
五、快速排序
快速排序三種找基準方式及兩種優化
六、堆排
七、歸併排序
時間複雜性:一般平均是o(n^2),最好的情況是o(n),最壞的情況是o(n^2)。
空間複雜性:o(1)。
穩定性:穩定排序。
氣泡排序的原理:
1、比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
2、對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3、針對所有的元素重複以上的步驟,除了最後乙個。
4、持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
#includevoid bubblesort(int *arr,int len)
} if(!swap)
}}void show(int *arr,int len)
else
}arr[j+1]=temp;
} }void show(int *arr,int len)
else
}arr[j+gap]=temp; }}
void shellsort(int *arr,int len)
; int lend = sizeof(drr)/sizeof(drr[0]);
for(int i = 0;i < lend;i++) }
void show(int *arr,int len)
arr[low]=arr[high];
while(lowlow)
if(key+1low)
while(top>0) }
free(stack);
stack =null;
}void show(int *arr,int len)
; int len = sizeof(arr)/sizeof(arr[0]);
srand(time(null));
for(int i=0;i3、三數取中法:
void swap(int *arr,int low,int high)
void selectpivotmedianofthree(int *arr,int low,int high)
if(arr[mid]>arr[low])
}
快速排序兩種優化方式
1、聚集相同基準法
void focusnumpar(int *arr,int low,int high,int par,int *left,int *right )
else
}} *left=parleft;
int parright=par+1;
for(int i=par+1;i<=high;i++)
else
}} *right=parright;
}}
2、當資料量很少時,採用直接插入排序
void insertsort(int *arr,int low,int high)
else
}arr[j+1]=temp;
}}
在堆的資料結構中,堆中的最大值總是位於根節點(在優先佇列中使用堆的話堆中的最小值位於根節點)。堆中定義以下幾種操作:
1、最大堆調整(max heapify):將堆的末端子節點作調整,使得子節點永遠小於父節點
2、建立最大堆(build max heap):將堆中的所有資料重新排序
3、堆排序(heapsort):移除位在第乙個資料的根節點,並做最大堆調整的遞迴運算
時間複雜性:一般平均是o(nlog2n),最好的情況是o(nlog2n),最壞的情況是o(nlog2n)。
空間複雜性:o(1)。
穩定性:不穩定排序。
**如下:
#include#include#includevoid swap(int *arr,int start,int end)
}void fun2(int *arr,int len)
}void show(int *arr,int len)
else
}while(start1 <= end1)
while(start2 <= end2)
//找兩個新的歸併段
start1 = end2+1;
end1 = start1+gap-1;
start2 = end1+1;
end2 = start2+gap-1 < len-1?start2+gap-1:len-1;
} while(start1 < len)
for(int i = 0;i < len;i++) }
void mergesort(int *arr,int len)
}void show(int *arr,int len)
printf("\n");
}int main()
; int len = sizeof(arr)/sizeof(arr[0]);
mergesort(arr,len);
show(arr,len);
return 0;
}
執行結果:
以上是目前總結的七種排序,在八大排序中,還有乙個基數排序,這個目前不做討論。
常見的幾種排序
常見的排序 選擇排序 直接選擇排序 堆排序 交換排序 氣泡排序 直接交換排序 插入排序 直接插入排序 shell排序 折半插入排序 歸併排序 基數排序 1.選擇排序 1.1直接選擇排序 選擇排序 直接選擇排序 每迴圈一次取出其中最大或者最小的乙個 插入到靠前或者靠後的位置 當然第一次從0開始,第二次...
常見的幾種排序
前言 最近聽公尺老師講了一遍排序,之前上課老師也講過,這次又聽了一遍,對排序有了更進一步的認識。接下來介紹一下最常見的幾種排序,以及自己對排序的理解。插入排序 插入排序包括 直接插入排序與shell排序 1.直接插入排序 概念 通過線性搜尋來確定待插入記錄的位置 演算法 圖中每一行的資料表示插入了第...
幾種常見的排序
1 插入排序 for int i 1 i n i 2 氣泡排序 for int i 0 i n 1 i 3 選擇排序 for int i 0 i n 1 i swap array,i,lowindex 4 快速排序 void swap int a,int i,int j int partition ...