`
- 浏览:
940188 次
- 性别:
- 来自:
杭州
-
一。直接插入排序
1。直接插入排序:
直接插入排序是一种简单的排序方法,它的基本思想是将待排序的记录按照其值的大小插入到已排好序的有序表的适当位置,直到全部插入完为止。举个整型的排序例子
2。直接插入排序的伪代码:
insertionsort(data[])
for i=1 to data.length-1
tmp=data[i];
将所有大于tmp的元素data[j]向后移动一位;
将tmp放在正确的位置上;
3.简单例子,以整型为例。
A)ruby语言实现:
def insertion_sort(a)
i=1
while i<a.length
tmp=a[i]
j=i
while j>0
break if tmp>a[j-1]
a[j]=a[j-1]
j-=1
end
a[j]=tmp
i+=1
end
end
a=[10,2,3]
insertion_sort(a)
a.each{|i | print i.to_s+" "}
B)java语言实现:
package com.sohu.blog.denns_zane.sort;
public class InsertSort{
public static void main(String args[]){
int []data={12,2,3,56,90};
insertsort(data);
for(int i=0;i<data.length;i++){
System.out.print(data[i]+" ");
}
}
public static void insertsort(int []data){
for(int i=1,j;i<data.length;i++){
int tmp=data[i];
for(j=i;j>0&&tmp<data[j-1];j--)
data[j]=data[j-1];
data[j]=tmp;
}
}
}
5。算法复杂度:
最好情况:进行n-1次比较和2(n-1)次移动,尽管他们其实都是多余的,复杂度O(n)
最坏情况:具体计算略,O(n*n)
平均情况:O(n*n),也就是接近最坏情况,在平均情况下,数组大小翻倍,它的排序工作将是原来的4倍。
二。选择排序
1。算法描述:选择算法试图先查找一个放错位置的元素并将它放到最终位置上,以此来局部化数组元素的交换。选择值最小的元素并将它和第一个位置上的元素交换。在第i步中,查找data[i],...,data[n-1]中的最小元素,并将它和data[i]进行交换。重复此过程,直到所有的元素都放入正确的位置为止。
2。伪代码描述:
selectionsort(data[])
for i=0 to data.length-2
从data[i],,data[n-1]中选取最小的元素
将它和data[i]交换
3。实现,以整型数组为例:
1)ruby语言实现:
def selection_sort(a)
least=0
for i in (0..(a.length-2))
j=i+1
least=i
while j<a.length
if a[j]<a[least]
least=j
end
j+=1
end
a[least],a[i]=a[i],a[least] unless least==i #交换
end
end
a=[12,4,34,23,45,35]
selection_sort(a)
a.each{|i| print i.to_s+" "}
代码很好理解,不做解释。
2)java语言实现:
package com.sohu.blog.denns_zane.sort;
public class SelectionSort{
public static int[] selection_sort(int [] data){
int i,j,least=0;
for(i=0;i<data.length-1;i++){
for(j=i+1,least=i;j<data.length;j++)
if (data[j]<=data[least])
least=j;
if (least!=i)
swap(data,least,i); //½»»»data[i]ºÍ×îСԪËØ
}
return data;
}
public static void swap(int[]data,int least,int i){
int tmp=data[least];
data[least]=data[i];
data[i]=tmp;
}
public static void main(String args[]){
int[] t={10,29,12,23,56};
selection_sort(t);
for(int i:t){
System.out.print(i+" ");
}
}
}
4.算法效率:
任何情况下,都需要进行n*(n-1)/2次比较,也就是O(n*n)的复杂度
最好情况:数组已经排序,不需要交换任何元素
最坏情况:最大元素在第一个位置而其他元素有序时,需要进行3*(n-1)次交换,即O(n),也是很好的结果
三。冒泡排序
1。算法伪代码描述:
bubblesort(data[])
for i=0 to data.length-2
for j=data.length-1 downto i+1
如果顺序错误,就交换j和j-1位置上的元素
2。实现:
1)ruby语言实现:
def bubble_sort(data)
for i in (0..(data.length-2))
j=data.length-1
while j>i
if data[j]<data[j-1]
data[j],data[j-1]=data[j-1],data[j] #交换
end
j-=1
end
end
end
a=[12,3,56,7,89,87]
bubble_sort(a)
a.each{|i| print i.to_s+" "}
2)java语言实现:
package com.sohu.blog.denns_zane.sort;
public class BubbleSort{
public static void bubble_sort(int [] data){
for(int i=0;i<data.length-1;i++)
for(int j=data.length-1;j>i;j--)
if(data[j]<data[j-1])
swap(data,j,j-1);
}
public static void swap(int[]data,int least,int i){
int tmp=data[least];
data[least]=data[i];
data[i]=tmp;
}
public static void main(String args[]){
int[] t={10,29,12,23,56};
bubble_sort(t);
for(int i:t){
System.out.print(i+" ");
}
}
}
3。算法效率:
冒泡排序的比较次数近似是插入排序的两倍,和选择排序相同;移动次数和插入排序相同,是选择排序的n倍。可以说,插入排序比冒泡排序快两倍。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本文将深入探讨四种基础的排序算法:直接插入排序、简单选择排序、简单交换排序(也称为冒泡排序),以及简单选择排序。 **直接插入排序**: 直接插入排序是一种直观的排序算法,其工作原理类似于打扑克牌。初始时...
简单选择排序是一种基础且直观的排序算法,虽然效率较低,但对理解排序原理非常有帮助。当我们需要在单链表这种非数组结构上进行排序时,需要对基本的简单选择排序算法进行一些调整。接下来,我们将详细探讨如何在...
在计算机科学中,排序算法是最基本也是最重要的算法之一。冒泡排序是一种简单的排序算法,它的主要思想是通过不断地比较相邻元素,并交换它们以达到排序的目的。在C语言中,冒泡排序的实现非常简单,下面我们将详细...
冒泡排序是最基础的排序算法之一,其原理简单直观,通过不断比较相邻两个元素的大小并交换位置来实现排序。书中提供了冒泡排序的三种实现方式: - **冒泡排序1**:基本版本,通过双重循环完成排序。 - **冒泡排序2*...
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放...
然而,值得注意的是,对于小规模数据,两种排序算法的性能差异可能并不明显,此时算法的简单性和易理解性可能比效率更重要。 总的来说,快速排序和冒泡排序都是排序算法的重要实例,它们代表了不同的时间复杂度级别...
快排算法的简单实现。 快速排序是实际运用中用的最多的算法,虽然它在最坏的情况下会达到n^2,但它的平均性能非常好,期望时间复杂度为nlgn,而且隐含的常数因子非常小,并且是原址排序。 快速排序原理:从一组数...
简单选择排序是一种基础且直观的排序算法,常用于教学或理解排序原理。在VC++环境中,我们可以使用C++语言来实现这种算法。本篇将详细阐述简单选择排序的工作原理、步骤以及如何用VC++实现。 **一、简单选择排序...
**冒泡排序**是一种简单直观的排序方法。它的核心思想是通过重复遍历数组,比较相邻元素并交换位置来逐渐将较大的元素“冒泡”到数组的一端。这个过程会进行多次,直到整个数组排序完成。在C++中,冒泡排序可以通过...
本文将深入探讨四种简单的排序算法:插入排序、冒泡排序、选择排序。这些算法虽然在复杂度上不如高级排序算法如快速排序或归并排序,但它们提供了基础的排序逻辑,有助于理解更复杂的算法思想。 首先,我们来详细...
### 简单排序算法简介 #### 一、简单排序算法概述 在计算机科学领域,**排序算法**是一类非常基础且重要的算法。这类算法旨在将一组无序的数据按照特定的顺序进行排列。由于实际应用中往往需要处理大量的数据,...
插入排序算法是一种简单的排序算法,它的工作原理是通过将每个元素插入到已经排序的序列中,以达到排序的目的。插入排序算法的时间复杂度为O(n^2),因此它适合小规模的数据排序。 4.快速排序算法 快速排序算法是一...
冒泡排序 简单选择排序 c语言基础 排序算法 数组操作 排序算法实验 简单的c语言程序 排序算法输出
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字...
冒泡排序是最简单的排序算法之一,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的...
2. 冒泡排序:是最简单的排序算法之一,通过不断交换相邻位置的元素来逐渐达到排序的目的。每一轮遍历都能确保最大(或最小)的元素被放置到正确的位置,重复这个过程直到整个数组排序完成。 3. 选择排序:每次从未...
1. **冒泡排序**:冒泡排序是最基础的排序算法之一,通过不断交换相邻的逆序元素,使较大的元素逐渐“浮”到序列的顶端。其时间复杂度为O(n^2)。 2. **插入排序**:插入排序将未排序的元素逐个插入已排序的序列,...
冒泡排序是一种简单的排序算法,它的基本思想是通过不断交换相邻的错误顺序元素来逐步推进排序过程。尽管冒泡排序易于理解和实现,但其效率较低,尤其对于大规模数据的排序,时间复杂度高达O(n^2),不适合处理大量...