java排序
### Java排序方法详解 在Java编程语言中,排序算法是数据结构与算法中的一个重要组成部分,广泛应用于各种场景中。本文将根据提供的代码片段详细介绍几种基本的排序算法:冒泡排序、选择排序、插入排序、希尔排序以及快速排序的分区部分。 #### 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 ```java public void bubbleSort(int[] data) { for (int out = data.length - 1; out > 0; out--) { for (int in = 0; in < out; in++) { if (data[in] > data[in + 1]) { swap(data, in, in + 1); } } } } ``` #### 选择排序(Selection Sort) 选择排序算法的工作原理是每次从未排序的部分找出最小(或最大)的元素放到已排序序列的末尾。这种方法的优点是简单且实现容易;缺点是效率较低。 ```java public void selectSort(int[] data) { for (int out = data.length - 1; out > 0; out--) { int max = out; for (int in = 0; in < out; in++) { if (data[in] > data[max]) { max = in; } } swap(data, out, max); } } ``` #### 插入排序(Insertion Sort) 插入排序算法类似于我们平时整理扑克牌的过程,从数组的第二个元素开始,将当前元素插入到已排序的序列中,并对未排序的序列进行迭代。插入排序适合小规模的数据处理,且其算法简单易懂。 ```java public void insertSort(int[] data) { int in, out, temp; for (out = 1; out < data.length; out++) { temp = data[out]; in = out; while (in > 0 && data[in - 1] > temp) { data[in] = data[in - 1]; in--; } data[in] = temp; } } ``` #### 希尔排序(Shell Sort) 希尔排序是基于插入排序的改进版,也称为缩小增量排序。它通过将比较的全部元素分为几个区域来提升插入排序的性能。希尔排序不是稳定的排序算法。它通过先对数组进行一个某增量的分组,对各组使用直接插入排序算法排序;增量逐渐减少,重复分组,直至增量为1。 ```java public void shellSort(int[] data) { int inner, outter, temp; int h = 1; while (h <= data.length / 3) { h = h * 3 + 1; } while (h > 0) { for (outter = h; outter < data.length; outter++) { temp = data[outter]; inner = outter; while (inner > h - 1 && data[inner - h] > temp) { data[inner] = data[inner - h]; inner -= h; } data[inner] = temp; } h = (h - 1) / 3; } } ``` #### 快速排序(Quick Sort) 快速排序是一种非常高效的排序算法,它的基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 ```java public int partitionIt(int[] data, int left, int right, long pivot) { int leftPtr = left - 1; int rightPtr = right + 1; while (true) { while (leftPtr < right && data[++leftPtr] < pivot); while (rightPtr > left && data[--rightPtr] > pivot); if (leftPtr >= rightPtr) break; else swap(data, leftPtr, rightPtr); } return leftPtr; } ``` 以上几种排序算法各有优劣,在不同的应用场景下可以选择合适的算法进行优化。例如对于小规模数据,可以选择插入排序或者选择排序;对于大规模数据,则可以选择快速排序或者希尔排序等更高效的算法。此外,还需要考虑数据的特点(如是否近似有序)以及具体的性能需求来进行合理的选择。



















import java.util.Collections;
import java.util.Random;
import javax.swing.text.AbstractDocument.BranchElement;
import javax.xml.crypto.Data;
public class SortLearning {
static int c = 0;
static int meg = 0;
public int[] theArray;
public SortLearning() {
theArray = new int[20];
}
public int[] createArray() {
Random random = new Random();
int[] array = new int[10];
for (int i = 0; i < 10; i++) {
array[i] = random.nextInt(100) - random.nextInt(100);// 生成两个随机数相减,保证生成的数中有负数
}
return array;
}
public void printArray(int[] data) {
for (int i : data) {
System.out.print(i + " ");
System.out.println();
}
private void swap(int[] data, int x, int y) {
int temp = data[x];
data[x] = data[y];
data[y] = temp;
}
public void bubbleSort(int[] data) {
for (int out = data.length - 1; out > 0; out--) {
for (int in = 0; in < out; in++) {
if (data[in] > data[in + 1])
swap(data, in, in + 1);
}
}
}
public void selectSort(int[] data) {
for (int out = data.length - 1; out > 0; out--) {
int max = out;
for (int in = 0; in < out; in++) {
if (data[in] > data[max])
max = in;
}
swap(data, out, max);
}
// for(int out = 0;out<data.length-1;out++){
// int min = out;
剩余7页未读,继续阅读


- 粉丝: 56
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 上海市建设工程建筑渣土承运合同.doc
- 办公大楼综合布线系统设计方案二.doc
- GMP培训教材-提取车间安全生产操作知识解释问答.doc
- 普外科出科考试试题.doc
- 广东高速公路桥梁墩柱施工技术交底.doc
- 财务工资管理系统解决方案.doc
- VDA6.3-提问表(潜在供方分析P1).docx
- 华为技术有限公司是一家生产销售通信设备的民营通信科技公司.doc
- 中石化物流培训方案-3-16.doc
- 土石方开挖放坡系数计算法.doc
- 磨床砂轮主轴热处理工艺设计周延源.docx
- 2023年云计算云服务考试试题答案解析试题库完整.doc
- -培训与开发(习题).doc
- HR试题新版.docx
- 如何提高物流配送水平精.doc
- 软件著作权申请截图完整的要求.pdf


