赞
踩
基本:
- private static void sort(int[] a){
- for (int i = 0; i < a.length-1; i++) {
- for (int j = 0; j < a.length-i-1; j++) {
- if (a[j]>a[j+1]){
- swap(a,j,j+1);
- }
- }
- }
- }
- private static void swap(int[] a,int i,int j){
- int temp=a[i];
- a[i]=a[j];
- a[j]=temp;
- }
优化一:
- private static void sort2(int[] a){
- for (int i = 0; i < a.length-1; i++) {
- boolean swapped=false;
- for (int j = 0; j < a.length-i-1; j++) {
- if (a[j]>a[j+1]){
- swap(a,j,j+1);
- swapped=true;
- }
- }
- if (!swapped){
- break;
- }
- }
- }
- private static void swap(int[] a,int i,int j){
- int temp=a[i];
- a[i]=a[j];
- a[j]=temp;
- }
优化二:
- private static void sort1(int[] a){
- int n=a.length-1;
- while (true){
- int last=0;
- for (int j = 0; j <n; j++) {
- if (a[j]>a[j+1]){
- swap(a,j,j+1);
- last=j;
- }
- }
- n=last;
- if (n==0){
- break;
- }
- }
- }
- private static void swap(int[] a,int i,int j){
- int temp=a[i];
- a[i]=a[j];
- a[j]=temp;
- }
将数组划分为有序和无序,每一轮都选择一个最小的值加入到已排序部分。
- private static void sort1(int[] a){
- for (int i = 0; i < a.length; i++) {
- int minIndex=i;
- for (int j = i+1; j <a.length; j++) {
- if (a[minIndex]>a[j]){
- minIndex=j;
- }
- }
- if (minIndex!=i){
- swap(a,minIndex,i);
- }
-
- }
- }
- private static void swap(int[] a,int i,int j){
- int temp=a[i];
- a[i]=a[j];
- a[j]=temp;
- }
- //插入排序
- private static void sort(int[] a){
- //i为待插入元素
- for (int i = 1; i < a.length; i++) {
- int t=a[i];
- for (int j = i-1; j>=0; j--) {
- if (a[j] > t) {
- a[j + 1] = a[j];
- } else {
- a[j + 1] = t;
- break;
- }
- }
- }
- }
希尔排序是一种基于插入排序的排序算法,也称为缩小增量排序。它通过将待排序的数组分割成若干个子序列,分别对每个子序列进行插入排序,最后再对整个数组进行一次插入排序。 具体步骤如下: 希尔排序的时间复杂度取决于增量序列的选择,通常情况下为O(n log n)。相比于插入排序,希尔排序在大规模数据的排序中效率更高。 |
9,23,19,18,23,15->9,15, 19,18,23,23->9,15,18,19,23,23
单边快排:选择最右侧元素为基准点元素,从左向右找一个比基准点元素大的元素,交换,然后从右向左找一个比基准点小的元素。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。