package com.algorithem.sort;
/*
*各种排序算法之我理解:
*选择排序:我认为这是最容易掌握的一种排序算法,其核心思想就是每一次都是从当前位置起到最后位置止,选取最大的或最小的放在当前位置;
*冒泡排序:进行N-1次冒泡,每一次冒泡都将该范围内最大或量小的往上送,其实现手段是通过交换相邻位置的数来实现的;
*插入排序:其核心思想是假定前面的数已经是有序的,只需把当前数插入前面的有序序列即可。其核心操作是数组的插入运算;
*快速排序:其核心思想是分治,是二分思想的应用,实现手段递归,是平均时间效率最高的排序算法.
*
*/
//常用排序算法小集,分别给出了升序与降序的方法,由flag进分升降区别
public class Sort {
// 选择排序,flag用来标志是进行升序排序还是降序排序
public static void chooseSort(int[] a, int flag) {
int n = a.length - 1; // length是数组的一个属性,而不是通过方法获取
for (int i = 0; i < n; i++) {
int max = a[i], k = i;
for (int j = i + 1; j <= n; j++) {
if (flag >= 0) {
if (a[j] >= max) {
k = j;
max = a[j];
}
} else {
if (a[j] <= max) {
k = j;
max = a[j];
}
}
}
if (k != i) {
int t = a[k];
a[k] = a[i];
a[i] = t;
}
}
}
// 冒泡排序,将大水泡或小水泡往上冒
public static void maopaoSort(int[] a, int flag) {
int n = a.length - 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i; j++) {
if (flag >= 0) {
if (a[j] <= a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
} else {
if (a[j] >= a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
}
}
// 插入法排序
public static void insertSort(int[] a, int flag) {
int n = a.length - 1, i, j, k, temp;
for (i = 0; i <= n; i++) {
for (j = 0; j <= i - 1; j++) {
if (flag <= 0) {
if (a[i] <= a[j]) {
break;
}
} else {
if (a[i] >= a[j]) {
break;
}
}
}
temp = a[i];
for (k = i - 1; k >= j; k--) {
a[k + 1] = a[k];
}
if (j >= 0 && j <= n)
a[j] = temp;
}
}
// 快速排序,其中划分函数是重点
public static void quickSort(int[] a, int flag) {
quicksort(a, 0, a.length - 1, flag);
}
public static void quicksort(int[] a, int low, int high, int flag) {
if (low <= high) {
int point = divide(a, low, high, flag);
quicksort(a, low, point - 1, flag);
quicksort(a, point + 1, high, flag);
}
}
public static int divide(int[] a, int low, int high, int flag) {
int point = a[low];
while (low < high) {
if (flag <= 0) {
while (a[high] >= point && high > low)
high--;
a[low] = a[high];
while (a[low] <= point && low < high)
low++;
a[high] = a[low];
} else {
while (a[high] <= point && high > low)
high--;
a[low] = a[high];
while (a[low] >= point && low < high)
low++;
a[high] = a[low];
}
}
a[high] = point;
return high;
}
public static void main(String[] args) {
int[] a = { 1, 3, 4, 6, 7, 9, 9, 12, 44, 3, 6, 34 };
// Sort.chooseSort(a, -1);
// for (int i : a) {
// System.out.print(i + " ");
// }
// System.out.println();
// Sort.chooseSort(a, 1);
// for (int i : a) {
// System.out.print(i + " ");
// }
// System.out.println();
// Sort.maopaoSort(a,1);
// for (int i : a) {
// System.out.print(i + " ");
// }
// System.out.println();
// Sort.insertSort(a,1);
// for (int i : a) {
// System.out.print(i + " ");
// }
// System.out.println();
// 测试快排升序
Sort.quickSort(a, -1);
for (int i : a) {
System.out.print(i + " ");
}
System.out.println();
// 测试快排降序
Sort.quickSort(a, 1);
for (int i : a) {
System.out.print(i + " ");
}
System.out.println();
}
}
分享到:
相关推荐
bubble_Sort_Algorithm JavaScript中的冒泡排序算法(升序和降序)
2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法和顺序要求,保证其他程序不修改 4.减少程序代码中逻辑上的冗余 5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点 6.提交设计报告,...
2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法和顺序要求,保证其他程序不修改 4.减少程序代码中逻辑上的冗余 5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点 包括实验报告...
该代码包括冒泡排序,插入排序和选择排序算法按升序和降序排列。 以及合并排序和快速排序算法感谢codingmiles.com和studytonight.com的Ankur Agarwal
selection_sort_algorithm 选择排序算法升序和降序
选择排序:void SelectSort(int L[],int n) 插入排序:void InsertSort(int L[], int n) 冒泡排序:void BubbleSort(int L[],int n) 快速排序:void QuickSort(int L[],int first,int last) 归并排序:void ...
2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法和顺序要求,保证其他程序不修改 4.减少程序代码中逻辑上的冗余 5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点 6.提交设计报告,...
TIA博途SCL语言冒泡排序算法FC全局库文件(可选升序降序)GF_bubble_Sort
然后,使用合并,插入或选择排序算法,按请求的升序或降序对集合重新排序。 作者:Briana Berger 日期:4/10/2018 我学到的东西:我学习了如何一起使用合并,选择和插入排序来订购商店的产品。 我喜欢的东西:我...
TIA博途SCL语言快速排序算法全局FC库文件(可选升序降序)GF_quick_Sort
2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法和顺序要求,保证其他程序不修改 4.减少程序代码中逻辑上的冗余 5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点 6.提交设计报告,...
2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法和顺序要求,保证其他程序不修改 4.减少程序代码中逻辑上的冗余 5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点
所有的代码和调试都有,可方便你下载和学习,比起没提供源代码的更方便
C语言版的希尔排序算法,可以有按照升序、降序两种方式进行排序
2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法和顺序要求,保证其他程序不修改 4.减少程序代码中逻辑上的冗余 5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点 包括实验报告。
本文实例讲述了JS实现数组按升序及降序排列的方法。分享给大家供大家参考,具体如下: ... 让数组按照升序降序排列 这里写个数组 var array=[1,80,4,33,21,55]; 升序输出: [removed] var array=[1,80,4,33,21,55];
排序算法是计算机科学中的基础概念,用于按升序或降序排列数据集。这里提供了两种常见的排序算法实现:冒泡排序和选择排序。 冒泡排序(Bubble Sort) 是一种基本的排序算法,它通过多次遍历数组,比较相邻元素的...
2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法和顺序要求,保证其他程序不修改 4.减少程序代码中逻辑上的冗余 5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点 6.提交设计报告,...
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。...2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法和顺序要求,保证其他程序不修改
运用面向对象思想完成多种排序算法,包括快速排序、选择排序、冒泡排序等,实现升序、降序、字典排序。