一、冒泡排序
public void bubbleSort(int[] a) {
int temp;
for (int i = a.length - 1; i > 1; i--) {
for (int j = 0; j < i; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
冒泡排序的算法是要将最小的数据项放在数组的最开始,并将最大的数据项放在数组的最后。每次比较为真,便将较小的数据项向前移动,同时将较大的数据项向后移动,外层for循环每执行一次,便有一个最大的数据项移至数组最末端,并且不再处理。
冒泡排序是最简单的一种排序方法,也是最慢的一种排序方法。它的算法复杂度是O(n^2),比较次数:N*(N-1)/2,交换次数最坏的情况也是:N*(N-1)/2。
二、选择排序
public static void selectionSort(int[] a) {
int min, temp;
for (int i = 0; i < a.length - 1; i++) {
min = i;
for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[min])
min = j;
}
if (i != min) {
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
}
选择排序的算法是在每一次的循环中,在 a.length – i +1 个 记录中选取最小的数据项作为数组的第i个记录。
虽然选择排序和冒泡排序执行了相同的比较次数:N*(N-1)/2,但是选择排序将必要的交换次数从O(n^2)减少到了O(n)。对于100个数据项,需要4950次比较,但选择排序只进行了不到100次交换。当N值很 大时,比较的次数是主要的,但是,选择排序无疑更快,因为它进行的交换次数少的多。所以,当N比较小,特别是如果交换的性能消耗比比较的性能消耗大得多时,用选择排序是相当快的。
三、插入排序
public void inserionSort(int a[]){
int temp;
for (int out=1;out < a.length;out++){
temp = a[out];
int in = out;
while (in >0 && a[in-1] >= temp){
a[in] = a[in-1];
in--;
}
a[in] = temp;
}
}
插入排序的算法是将一个数据项插入到已排好序的有序数组(部分有序)中,从而得到一个新的、数据项个数增1的有序数组。
插入排序的比较次数实际上大约是N*(N-1)/4 次。复制的次数大致等于比较的次数,由于一次复制与一次交换的时间耗费不同,所以相对于随机数据,这个算法比冒泡排序快一倍,比选择排序略快。
如果数据基本有序,插入排序几乎只需要O(N)的时间;然后对于逆序排列的数据,每次比较和移动都会执行,所以这时插入排序并不比冒泡快。
四、快速排序
public static void recQuickSort(int a[], int left, int right) {
if (right - left <= 0)
return;
else {
int partition = partitionIt(a, left, right);
recQuickSort(a, left, partition - 1); // sort left side
recQuickSort(a, partition + 1, right); // sort right side
}
}
public static int partitionIt(int a[], int left, int right) {
int leftPtr = left - 1;
int rightPtr = right;
int pivot = a[right];
while (true) {
while (a[++leftPtr] < pivot);
while (rightPtr > 0 && a[--rightPtr] > pivot);
if (leftPtr >= rightPtr)
break;
else {
swap(a, leftPtr, rightPtr);
}
}
swap(a, leftPtr, right);
return leftPtr;
}
public static void swap(int a[], int dex1, int dex2)
{
int temp = a[dex1];
a[dex1] = a[dex2];
a[dex2] = temp;
}
快速排序的算法是取得数组中的某一个值,并按此值将数组分割为两个字数组,递归对字数组按此方法排序。
快速排序算法的性能主要取决于每次对中间值得获取,换言之即为对数组划分的对称性。
快速排序算法在平均情况下的时间复杂度是O(nlogn)。在大多数情况下,该算法的排序是最快的,快速排序也因此而得名。
分享到:
相关推荐
在本系统中,我们主要实现了五种常用的排序算法:冒泡排序法、快速排序法、直接插入排序法、折半插入排序法和树形选择排序法。这些算法都是在计算机科学中最基本和最重要的排序算法,广泛应用于各种数据处理和分析...
常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...
常见的排序算法有插入排序、快速排序、选择堆积排序法等。 插入排序算法是一种简单的排序算法,适用于小规模的数据结构。该算法将数据结构分成已排序部分和未排序部分,并将未排序部分的元素插入到已排序部分中。...
在计算机科学领域,排序算法是数据处理中的核心部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源"总结了各种排序算法,并用C++代码实现,并有演示",提供了丰富的学习材料,包括不同类型...
希尔排序是一种基于插入排序的算法,通过将待排序的数组元素按某个增量分组,然后对每组使用直接插入排序算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止...
本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种非常有效的排序方法,其核心思想是分治法:将数据分为若干个子集,对这些子集分别进行排序,最后将排序...
最快的排序算法 最快的内部排序法—桶排序法,排序算法数据结构
在IT领域,排序算法是计算机科学中的基础但至关重要的概念,尤其在数据处理和算法设计中扮演着核心角色。本文将深入探讨标题中提到的几种基于比较的排序算法:选择排序、插入排序、归并排序、快速排序、堆排序、冒泡...
最快的排序算法 最快的内部排序法—桶排序法 (1),排序算法数据结构
在计算机科学领域中,排序算法是一种基本的算法,它可以将数据按照一定的顺序排列,以便更好地存储、检索和处理数据。排序算法的速度和效率对程序的性能有着至关重要的影响。 1.冒泡排序算法 冒泡排序算法是一种...
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...
根据给定文件的信息,本文将深入探讨C语言中的两种经典排序方法:插入排序法与冒泡排序法。这两种方法在实际编程中应用广泛,对于理解数据结构与算法的基础概念至关重要。 ### 一、冒泡排序法 #### 1.1 基本原理 ...
双向起泡排序法是一种在链表结构中实现的排序算法,尤其适用于双向链表。它借鉴了传统冒泡排序的基本思想,但在链表环境中进行了优化,以提高效率。本篇文章将详细探讨双向起泡排序法及其在带头结点的双向链表中的...
六种排序算法的排序系统 本篇文章主要讲解了六种排序算法的排序系统,包括插入排序、冒泡排序、选择排序、快速排序、堆排序和归并排序。该系统可以让用户选择六种排序算法中的任意一个,并输出结果。 插入排序 ...
在IT领域,排序算法是计算机科学中的基础但至关重要的部分,尤其在数据处理和数据分析中起着关键作用。本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并...
在计算机科学中,排序算法是数据结构领域的重要组成部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源提供了三种经典的排序算法的C语言实现:堆排序、直接插入排序和快速排序。 首先,让...
【排序算法性能分析】 在计算机科学中,排序算法是用于重新排列一组数据的算法,使得数据按照特定的顺序排列。本篇文章将详细讨论几种常见的排序算法:选择排序、冒泡排序、插入排序、合并排序以及快速排序,分析...
在计算机科学领域,排序算法是数据处理中至关重要的一部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、...
时间复杂度用于衡量排序算法的效率,通常以大O表示法来表示。文档中提到了几种不同排序算法的时间复杂度: - **O(n²)**:插入排序、冒泡排序和选择排序的时间复杂度均为O(n²),这意味着随着数据量的增加,这些...
排序算法是计算机科学中最基础和重要的算法之一,用于将一组数据按照特定的顺序进行排列。本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其...