public class Sort {
/**
* 冒泡排序:比较两个数,如果左边大于右边,交换位置;如果左边小于等于右边,位置不变;
* 向右移动一个位置,比较下面两个数;每一次将最大的数排在了最右边,形象的像冒泡。
*
*/
public static void bubbleSort(int[] b){
for (int i = 0; i < b.length-1; i++) {
for (int j = 0; j < b.length-i-1; j++) {
if(b[j]>b[j+1]){
int temp ;
temp=b[j];
b[j+1]=temp;
b[j]=b[j+1];
}
}
}
}
/**选择排序:将所有数据中挑出最小的,放在0号位置;此时最左边为有序数列,
* 不需要交换位置(同冒泡相反,冒泡为右边是有序数列);再次从一号位置开
* 始,寻找最小的数,然后和一号交换。。。持续下去。
*
* @param s
*/
public static void selectSort(int[] s){
for (int i = 0; i < s.length; i++) {
for (int j = i+1; j < s.length; j++) {
if(s[i] > s[j]){
int temp = s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
}
/**
*
* 将n个元素的数列分为已有序和无序两个部分,每次处理就是将无序数列的第一个元素
* 与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
* @param in
*/
public static void insertSort(int[] in){
for (int i = 0; i < in.length; i++) {
for (int j = i; j >0; j--) {
if(in[j]<in[j-1]){
int temp = in[j];
in[j]=in[j-1];
in[j-1]=temp;
}else{
break;
}
}
}
}
public static void shellSort(int s[]){
int step=s.length%2==1&&s.length!=1?s.length/2+1:s.length/2;
while (step!=0) {
for (int i = 0; i < s.length-step; i++) {
for (int j = i; j < s.length-step; j+=step) {
if (s[j]>s[j+step]) {
int temp=s[j];
s[j]=s[j+step];
s[j+step]=temp;
}
}
}
step=step%2==1&&step!=1?step/2+1:step/2;
}
}
public static void print(int[] x){
for (int i = 0; i < x.length; i++) {
System.out.print(x[i]+" ");
}
System.out.println(" ");
}
public static void main(String[] args) {
int[] a={1,4,7,12,0,14};
bubbleSort(a);
print(a);
selectSort(a);
print(a);
insertSort(a);
print (a);
shellSort(a);
print(a);
}
}
/**
* 冒泡排序:比较两个数,如果左边大于右边,交换位置;如果左边小于等于右边,位置不变;
* 向右移动一个位置,比较下面两个数;每一次将最大的数排在了最右边,形象的像冒泡。
*
*/
public static void bubbleSort(int[] b){
for (int i = 0; i < b.length-1; i++) {
for (int j = 0; j < b.length-i-1; j++) {
if(b[j]>b[j+1]){
int temp ;
temp=b[j];
b[j+1]=temp;
b[j]=b[j+1];
}
}
}
}
/**选择排序:将所有数据中挑出最小的,放在0号位置;此时最左边为有序数列,
* 不需要交换位置(同冒泡相反,冒泡为右边是有序数列);再次从一号位置开
* 始,寻找最小的数,然后和一号交换。。。持续下去。
*
* @param s
*/
public static void selectSort(int[] s){
for (int i = 0; i < s.length; i++) {
for (int j = i+1; j < s.length; j++) {
if(s[i] > s[j]){
int temp = s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
}
/**
*
* 将n个元素的数列分为已有序和无序两个部分,每次处理就是将无序数列的第一个元素
* 与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。
* @param in
*/
public static void insertSort(int[] in){
for (int i = 0; i < in.length; i++) {
for (int j = i; j >0; j--) {
if(in[j]<in[j-1]){
int temp = in[j];
in[j]=in[j-1];
in[j-1]=temp;
}else{
break;
}
}
}
}
public static void shellSort(int s[]){
int step=s.length%2==1&&s.length!=1?s.length/2+1:s.length/2;
while (step!=0) {
for (int i = 0; i < s.length-step; i++) {
for (int j = i; j < s.length-step; j+=step) {
if (s[j]>s[j+step]) {
int temp=s[j];
s[j]=s[j+step];
s[j+step]=temp;
}
}
}
step=step%2==1&&step!=1?step/2+1:step/2;
}
}
public static void print(int[] x){
for (int i = 0; i < x.length; i++) {
System.out.print(x[i]+" ");
}
System.out.println(" ");
}
public static void main(String[] args) {
int[] a={1,4,7,12,0,14};
bubbleSort(a);
print(a);
selectSort(a);
print(a);
insertSort(a);
print (a);
shellSort(a);
print(a);
}
}
本文深入探讨了四种经典的排序算法:冒泡排序、选择排序、插入排序和希尔排序。从算法原理、实现细节、时间复杂度到实际应用,全方位解析每种算法的特点和应用场景。
3208

被折叠的 条评论
为什么被折叠?



