基本排序算法的实现

  1 package com.dongbin.sort;
  2
  3 import java.util.Arrays;
  4
  5 /**
  6  * 排序
  7  * @author dongbin
  8  *
  9  */
 10 public class AllSort {
 11
 12     public static void main(String[] args) {
 13         int[] arr = {1,32,43,11,23,45};
 14         MergeSort(arr);
 15         System.out.println(Arrays.toString(arr));
 16     }
 17
 18     /**
 19      * 冒泡排序
 20      * @param arr
 21      * @return
 22      */
 23     public static int[] BubbleSort(int[] arr){
 24
 25         for(int i=0;i<arr.length-1;i++){
 26             for(int j=i+1;j<arr.length;j++){
 27                 if(arr[i]>arr[j]){
 28                     int temp = arr[i];
 29                     arr[i] = arr[j];
 30                     arr[j] = temp;
 31                 }
 32             }
 33         }
 34         return arr;
 35     }
 36
 37     /**
 38      * 选择排序
 39      * @param arr
 40      * @return
 41      */
 42     public static int[] SelectionSort(int[] arr){
 43
 44         int min;
 45         for(int i=0;i<arr.length-1;i++){
 46             min=i;
 47             for(int j=i+1;j<arr.length;j++){
 48                 if(arr[i]>arr[j]){
 49                     min = j;
 50                 }
 51             }
 52
 53             if(min!=i){
 54                 int temp = arr[i];
 55                 arr[i] = arr[min];
 56                 arr[min] = temp;
 57             }
 58         }
 59         return arr;
 60     }
 61
 62     /**
 63      * 插入排序
 64      * @param arr
 65      * @return
 66      */
 67     public static int[] InsertSort(int[] arr){
 68
 69         for(int i=1;i<arr.length;i++){
 70             int current = arr[i];
 71             int pos = i;
 72             for(int j=i-1;j>=0;j--){
 73                 if(arr[j]>current){
 74                     arr[j+1] = arr[j];
 75                     pos = j;
 76                 }
 77             }
 78             arr[pos]=current;
 79         }
 80         return arr;
 81     }
 82
 83     /**
 84      * 快速排序
 85      * @param arr
 86      * @return
 87      */
 88     public static int[] QuickSort(int[] arr){
 89         if(arr.length<=1){
 90             System.out.println("传入的数组长度小于或等于1");
 91         }else{
 92             _quickSort(arr, 0, arr.length-1);
 93         }
 94
 95         return arr;
 96     }
 97
 98     public static void _quickSort(int[] arr ,int start, int end){
 99         if(start>=end){
100             return;
101         }
102
103         int i = start,j=end,current = arr[j];
104         boolean flag = false;
105
106         while(i!=j){
107             if(flag){
108                 if(arr[j]<current){
109                     int temp = arr[j];
110                     arr[j] = arr[i];
111                     arr[i] = temp;
112                     flag = false;
113                 }else j--;
114             }else{
115                 if(arr[i]>current){
116                     int temp = arr[j];
117                     arr[j] = arr[i];
118                     arr[i] = temp;
119                     flag = true;
120                 }else i++;
121             }
122         }
123
124         _quickSort(arr, start, i-1);//左边
125         _quickSort(arr, j+1, end);//右边
126     }
127
128
129     /**
130      * 归并排序
131      * @param arr
132      * @return
133      */
134     public static int[] MergeSort(int[] arr){
135         _mergeSort(arr, 0, arr.length-1);
136         return arr;
137     }
138
139     public static void _mergeSort(int[] arr,int left,int right){
140
141         if (left < right) {
142             int mid = (left + right) / 2;
143             // 划分
144             _mergeSort(arr, left, mid);
145             _mergeSort(arr, mid + 1, right);
146
147             // 合并
148             _merge(arr, left, mid, right);
149         }
150
151     }
152     public static void _merge(int[] arr,int left,int mid,int right){
153
154         int[] newArr = new  int[arr.length];//新数组
155         int center = mid+1;
156         int tmp = left;
157         int pos = left;
158
159         while(left<=mid&&center<=right){
160             if(arr[left]<=arr[center]){
161                 newArr[pos++]=arr[left++];
162             }else{
163                 newArr[pos++]=arr[center++];
164             }
165         }
166
167         while(left<=mid){
168             newArr[pos++]=arr[left++];
169         }
170
171         while(center<=right){
172             newArr[pos++]=arr[center++];
173         }
174
175         while(tmp<=right){
176             arr[tmp] = newArr[tmp++];
177         }
178
179
180
181     }
182 }
时间: 2024-10-17 08:25:54

基本排序算法的实现的相关文章

探讨排序算法的实现

排序算法是我们工作中使用最普遍的算法,常见的语言库中基本都会有排序算法的实现,比如c标准库的qsort,stl的sort函数等.本文首先介绍直接插入排序,归并排序,堆排序,快速排序和基数排序等比较排序算法,然后介绍计数排序,基数排序等具有线性时间的排序算法.本文主要讨论算法的实现方法,并不会过多介绍基本理论. 评价一个排序算法优劣适用与否,一般需要从三个方面来分析 时间复杂度.用比较操作和移动操作数的最高次项表示,由于在实际应用中最在乎的是运行时间的上限,所以一般取输入最坏情况的下的运行时间作为

Python 排序算法的实现

冒泡排序: 1 def bubble(l): 2 length = len(l) 3 for i in range(length): 4 for j in range(i+1, length): 5 if l[i] > l[j]: 6 l[i], l[j] = l[j], l[i] 7 print l 选择排序: 1 def select(l): 2 length = len(l) 3 for i in range(length): 4 minn = i 5 for j in range(i+1

Python学习(三) 八大排序算法的实现(下)

本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过一趟排序将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整个排序过程能够递归进行,以此达到整个数据变成有序序列. 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全

七种排序算法的实现和总结

最近把七种排序算法集中在一起写了一遍. 注释里有比较详细的说明. 1 /*排序算法大集合**/ 2 #include <stdio.h> 3 #include <string.h> 4 #include <stdlib.h> 5 6 //------------------快速排序------------------// 7 /* 8 核心: 9 如果你知道多少人该站你前面,多少人站你后面,你一定知道你该站哪个位置. 10 算法: 11 1.选取分界数,参考这个分界数,

软考笔记第六天之各排序算法的实现

对于前面的排序算法,用c#来实现 直接插入排序: 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序.第一趟比较前两个数,然后把第二个数按大小插入到有序表中: 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中:依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程.直接插入排序属于稳定的排序,最坏时间复杂性为O(n^2),空间复杂度为O(1).直接插入排序是由两层嵌套循环组成的.外层循环标识并决定待比较的数值.内层循环为待比较数值确定其最终位

常见排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)

这篇博客主要实现一些常见的排序算法.例如: //冒泡排序 //选择排序 //简单插入排序 //折半插入排序 //希尔排序 //归并排序 //双向的快速排序 //单向的快速排序 //堆排序 对于各个算法的实现原理,这里不再多说了,代码中注释较多,结合注释应该都能理解算法的原理,读者也可自己google一下.另外,注释中有很多点,比如边界条件.应用场景等已经用 * 标记,* 越多,越应该多注意. 下面是实现: //冒泡排序 void BubbleSort(int *arr, int n) { if(

排序算法的实现(归并,快排,堆排,希尔排序 O(N*log(N)))

今天跟着左老师的视频,理解了四种复杂度为 O(N*log(N))的排序算法,以前也理解过过程,今天根据实际的代码,感觉基本的算法还是很简单的,只是自己写的时候可能一些边界条件,循环控制条件把握不好. //对于一个int数组,请编写一个选择冒泡算法,对数组元素排序. //给定一个int数组A及数组的大小n,请返回排序后的数组. //测试样例: //[1, 2, 3, 5, 2, 3], 6 //[1, 2, 2, 3, 3, 5] #include <iostream> using namesp

数据结构实验4(排序算法的实现及性能分析)

实现了选择排序, 插入排序, 冒泡排序, 快速排序, 改进后的快速排序, 以及两路合并排序. 通过随机函数随机生成100个数, 进行各种排序, 记录排序开始时间以及结束时间, 计算消耗的时间来比较算法的优略. 实现代码: #include "iostream" #include "cstdio" #include "cstring" #include "algorithm" #include "queue"

各种排序算法的实现代码

#include"stdio.h" #include"malloc.h" #include"stdlib.h" typedef int KeyType; #define MAXSIZE 20 typedef struct { KeyType key; }RedType; typedef struct { RedType r[MAXSIZE+1]; int length; }SqList,* SQLIST; void play_choose(voi

排序算法的实现--理解方法实现

以前也看过很多排序算法的原理,每次都想自己实现一下,一直都再拖,现在着牛课网学习算法课程,希望自己能够坚持练习. //对于一个int数组,请编写一个选择冒泡算法,对数组元素排序. //给定一个int数组A及数组的大小n,请返回排序后的数组. //测试样例: //[1, 2, 3, 5, 2, 3], 6 //[1, 2, 2, 3, 3, 5] #include <iostream> using namespace std; #include<string> void printR