冒泡排序,快速排序
冒泡排序:
1) 实现的方式:重复地走访过要排序的元素列,依次比较两个相邻的元素,按照一个顺序交换(可以从大到小,也可以从小到大),直到元素列排序完成。
2)名字的由来:因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”
3)图解:
4)算法分析:
时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数和记录移动次数
均达到最小值:,。
所以,冒泡排序最好的时间复杂度为。
若初始文件是反序的,需要进行趟排序。每趟排序要进行次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:
冒泡排序的最坏时间复杂度为
综上,因此冒泡排序总的平均时间复杂度为。
算法稳定性
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;
如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
5)java的实现:
public static void bubbleSort(int arr[]) {
for(int i =0 ; i<
arr.length-1
; i++) {
for(int
j
=
0
; j<arr.length-1-i ; j++) {
if(arr[j]>arr[j+1]) {
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
参考:https://baike.baidu.com/item/冒泡排序/4602306
快速排序算法:
1. 快速排序(Quicksort)是对冒泡排序的一种改进。
2.由来:快速排序由C. A. R. Hoare在1960年提出。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
java实现:
public
static
int
[] qsort(
int
arr[],
int
start,
int
end) {
int
pivot = arr[start];
int
i = start;
int
j = end;
while
(i<j) {
while
((i<j)&&(arr[j]>pivot)) {
j--;
}
while
((i<j)&&(arr[i]<pivot)) {
i++;
}
if
((arr[i]==arr[j])&&(i<j)) {
i++;
}
else
{
int
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
if
(i-
1
>start) arr=qsort(arr,start,i-
1
);
if
(j+
1
<end) arr=qsort(arr,j+
1
,end);
return
(arr);
}
public
static
void
main(String[] args) {
int
arr[] =
new
int
[]{
3
,
3
,
3
,
7
,
9
,
122344
,
4656
,
34
,
34
,
4656
,
5
,
6
,
7
,
8
,
9
,
343
,
57765
,
23
,
12321
};
int
len = arr.length-
1
;
arr=qsort(arr,
0
,len);
for
(
int
i:arr) {
System.out.print(i+
"\t"
);
}
}
来源:https://baike.baidu.com/item/快速排序算法/369842?fr=kg_qa