public class Main{
public static void main(String[] args){
Main t = new Main();
// 选择排序
int[] data = new int[]{1,5,3,4,2,1,6};
t.selectSort(data);
for (int i=0; i<data.length; i++){
System.out.print(data[i] + " ");
}
System.out.println();
// 冒泡排序
data = new int[]{1,5,3,4,2,1,6};
t.bubbleSort(data);
for (int i=0; i<data.length; i++){
System.out.print(data[i] + " ");
}
System.out.println();
// 快速排序
data = new int[]{1,5,3,4,2,1,6};
t.qsort(data,0,data.length-1);
for (int i=0; i<data.length; i++){
System.out.print(data[i] + " ");
}
System.out.println();
}
/**
* 选择排序[小 -> 大]
*/
public int[] selectSort(int[] data){
if (data == null || data.length < 2){
return data;
}
for (int i=0; i<data.length; i++){
int min = i;
for (int j=i+1; j<data.length; j++){
if (data[min] > data[j]){
min = j;
}
}
if (i != min){
int tmp = data[i];
data[i] = data[min];
data[min] = tmp;
}
}
return data;
}
/**
* 冒泡排序[小 -> 大]
*/
public int[] bubbleSort(int[] data){
if (data == null || data.length < 2){
return data;
}
// 最多扫描 [0,length-2]趟
int size = data.length - 2;
boolean exchange = false;
for (int i=0; i<=size; i++){
exchange = false;
for (int j=data.length-1; j>i; j--){
if (data[j] < data[j-1]){
int tmp = data[j];
data[j] = data[j-1];
data[j-1] = tmp;
exchange = true;
}
}
if (!exchange){
break;
}
}
return data;
}
/**
* 快速排序
*/
public int[] qsort(int[] data,int low,int high){
if (low < high){
// 分区
int center = partition(data,low,high);
// 对左边排序
qsort(data,low,center-1);
// 对右边排序
qsort(data,center+1,high);
}
return data;
}
/**
* 分区
*/
public int partition(int[] data,int low,int high){
int key = data[low];
while(low < high){
// 从右边找一个小于key的值
while(low < high && key <= data[high]){
--high;
}
data[low] = data[high];
// 从左边找一个大于key的值
while (low < high && data[low] <= key){
++low;
}
data[high] = data[low];
}
data[low] = key;
return low;
}
}
分享到:
相关推荐
常见的几种排序方式,包括选择排序,冒泡排序,快速排序,希尔排序,堆排序,插入排序。vs2008实现,对话框方式,主要实现字符串的由小到大排序。点击“几种排序方法.vcproj“运行。字符集使用多字节集,不能用...
本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...
快速排序和冒泡排序是两种常见的排序算法,它们在计算机科学中扮演着重要的角色,特别是在数据处理和优化程序性能方面。本篇文章将深入探讨这两种排序算法的原理、效率以及它们在C#编程语言中的实现。 首先,让我们...
在本文中,我们将深入探讨四种经典的排序算法:插入排序、选择排序、基数排序和冒泡排序,以及它们在C++语言中的实现。 **插入排序(Insertion Sort)** 插入排序是一种简单直观的排序算法,它的工作原理类似于我们...
以上六种排序算法各有优缺点,如选择排序和冒泡排序时间复杂度较高,但实现简单;插入排序在部分有序的情况下效率较高;基数排序适用于处理大量整数排序;快速排序平均性能优秀,但最坏情况下时间复杂度较高;归并...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
冒泡排序和选择排序是两种基础的排序算法,在计算机科学中有着广泛的应用,尤其是在学习编程语言如C语言时,理解并能实现这两种排序算法是非常重要的。下面将详细讲解这两种排序方法以及它们在C语言中的实现。 **...
以下是关于"冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序"这七种常见排序算法的源码实现及相关知识点的详细解释: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
本资源包含了几种常见的排序算法,包括堆排序、选择排序、冒泡排序、归并排序和插入排序。这些排序算法各有特点,适用于不同的场景,并且在理解它们的工作原理后,能够帮助初学者更好地掌握编程基础。 1. **堆排序*...
这里有8种常见的排序算法,包括选择排序、冒泡排序和快速排序等。这些算法各有特点,适用于不同的场景,理解并掌握它们对于编程和数据处理至关重要。 1. **选择排序(Selection Sort)** 选择排序是一种简单直观的...
本节将深入探讨两种常见的排序算法:冒泡排序和快速排序。 首先,我们来详细讲解冒泡排序。冒泡排序是一种简单直观的排序算法,它的基本思想是通过重复遍历待排序的数列,依次比较相邻元素并交换位置,使得较大的...
本资源包含了七种常见的排序算法的源代码,包括经典的冒泡排序。接下来,我们将详细探讨这些排序算法的基本原理、实现方式以及各自的优缺点。 1. **冒泡排序**: 冒泡排序是最基础的排序算法,通过重复遍历待排序的...
常见的排序方法_python插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数_AllSort
冒泡排序和快速排序是两种常见的排序算法,它们在排序过程中的时间性能有很大的差异。在本文中,我们将比较冒泡排序和快速排序的时间性能,并讨论它们在实际应用中的优缺点。 冒泡排序的时间性能: 冒泡排序的时间...
在给定的文档中,介绍了多种常见的排序算法,包括冒泡排序、快速排序、选择排序、插入排序等,并提供了相应的Java代码实现。 冒泡排序(Bubble Sort)是一种简单的比较排序算法,其基本思想是通过重复遍历待排序...
这里我们汇总了七种常见的排序算法:Shell排序、归并排序、选择排序、快速排序、堆排序、冒泡排序和插入排序。每种算法都有其独特的特点和适用场景,下面将逐一详细介绍。 1. **Shell排序**:由Donald Shell提出,...
这里我们将深入探讨几种常见的排序算法:冒泡排序、插入排序、快速排序、双路快速排序、三路快速排序以及堆排序。 **1. 冒泡排序** 冒泡排序是最基础的排序算法之一,其工作原理类似于水底下的气泡逐渐上浮。通过...
快速排序和冒泡排序是两种常见的排序算法,它们在计算机科学和编程中有着广泛的应用。本测试集旨在帮助开发者和学习者验证和比较这两种排序算法的性能和效果。 快速排序是一种高效的分治策略排序算法,由C.A.R. ...
本主题将详细介绍三种基本的排序算法:快速排序、选择排序和冒泡排序,以及它们在Java中的实现。 1. **快速排序**: 快速排序是一种高效的分治算法,由C.A.R. Hoare在1960年提出。其主要思想是通过一趟排序将待排...
本文将详细探讨四种常见的算法:选择排序、冒泡排序、快速排序以及折半查找。 首先,我们来看选择排序。选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素...