直接插入排序:和自己前面的数比较,如果发现大于自己的,数组往后移一个位置,空出来的位置放自己的值。
直接选择排序:和自己后面的数比较,如果找到小于自己的最小数,元素转换。
冒泡排序:相邻的两个元素相互比较,如果不满足条件元素相互转换。
快速排序:把数组分为两部分,值高于参考值的和值低于参考值的,这样不断地递归排序。下面是我练习的代码:
写道
package my.sort;
public class Sort {
/**
* @param args
*/
/*public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26};
if(Sort.sort(a).length>0){
int[] b=Sort.sort(a);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}
}*/
/*public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26,25};
if(Sort.chooseSort(a).length>0){
int[] b=Sort.chooseSort(a);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}
}*/
/*public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26,25,24};
if(Sort.bubbleSort(a).length>0){
int[] b=Sort.bubbleSort(a);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}
}*/
public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26,25,24,23,22};
if(Sort.quickSort(a,0,a.length-1).length>0){
int[] b=Sort.quickSort(a,0,a.length-1);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}
}
//直接插入排序
private static int[] sort(int[] a){
//获取数组元素
for(int i=0;i<a.length;i++){
//获取下标小于自己的数组元素
for(int j=0;j<i;j++){
//发现数值大于自己值的数组元素
if(a[i]<a[j]){
int temp=a[i];//保存自己值
for(int k=i;k>j;k--)
a[k]=a[k-1];//数组元素往后移一个位置
a[j]=temp; //保存的值放进去
}
}
}
return a;
}
//直接选择排序
private static int[] chooseSort(int[] a){
//获取数组元素
for(int i=0;i<a.length;i++){
int k=i;
for(int j=i+1;j<a.length;j++){//获取下标大于自己下标数组元素
if(a[j]<a[k])//发现数值小于自己数值的元素,保存其下标
k=j;
}
//找到了最小的数值,转换位置
if(k!=i){
int temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
return a;
}
//冒泡排序
private static int[] bubbleSort(int[] a ){
//遍历数组
for(int i=0;i<a.length-1;i++){
//数组元素与其后面的数组元素比较数值大小,发现值大于后面的,转换位置
for(int j=0;j<a.length-i-1;j++){
if(a[j+1]<a[j]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
return a;
}
//快速排序
private static int[] quickSort(int[] a,int low,int high){
int i,j,temp;
if(low<high){
i=low;
j=high;
temp=a[i];
while(i<j){
/*临时变量temp从数组最后一个元素开始比较,
情况A.直到发现小于或等于temp的元素停止,j就是这个元素的下标,
情况B.没有发现j会变成j=i*/
while(i<j&&a[j]>temp) j--;
//情况A下,值较小的下标为j的元素放在下标i的位置
if(i<j){
a[i]=a[j];
i++;//i加1
}
/*临时变量temp从其后面的数据元素开始比较,
情况A.直到发现大于或等于temp的元素停止,i就是这个元素的下标,
情况B.没有发现i会变成i=j*/
while(i<j&&a[i]<temp) i++;
//情况A下,值较大的下标为i的元素放在下标j的位置
if(i<j){
a[j]=a[i];
j--;//j减1
}
}
a[i]=temp;//确定临时变量temp在数组a中的升序位置
//值为小于temp的数据元素快速排序
quickSort(a,low,i-1);
//值为大于temp的数据元素快速排序
quickSort(a, i+1, high);
}
return a;
}
}
分享到:
相关推荐
最快的排序算法 C语言最简单的排序算法冒泡排序并返回排序前索引序号,排序算法数据结构
最快的排序算法 最快的内部排序法—桶排序法,排序算法数据结构
最快的排序算法 最快的内部排序法—桶排序法 (1),排序算法数据结构
合并排序算法和快速排序算法采用了采用分治法、递归的方法,将时间复杂度降为O(nlogn)。在本次实验中将数据量提到5万的时候,该类算法运行时间仍在几毫秒左右,而上面的3种算法运行时间已经到达十几秒左右,效率...
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...
之前说过轴的选择是快速排序法的效率关键之一,在这边的快速排序法的轴选择方式更加快了快速排序法的效率,它是来自演算法名书 Introduction to Algorithms 之中。
常用排序算法的动态演示系统的开发,演示冒泡排序法、快速排序法、直接插入排序法、折半插入排序法、树形选择排序法
常见经典排序算法(C语言)1希尔排序 二分插入法 直接插入法 带哨兵的直接排序法 冒泡排序 选择排序 快速排序 堆排序.docx
总结了各种排序算法,并用C++代码实现,并有演示
桶式排序法桶式排序法桶式排序法桶式排序法
js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js...
题目一: 内排序算法比较 1) 对以下6种常用的内部排序算法进行比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。 2) 待排序记录的文件个数不小于1000( 其数据用伪随机数产生),至少用5组...
十大经典排序算法 排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中 进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序 记录,在...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
1、本演示程序对以下6种常用的内部排序算法进行实测比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 2、待排序表的表的元素的关键字为整数,表长不小于100;其中的数据要用伪随机数产生...
常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结
在STM8S003单片机上实现数组排序,用3种冒泡排序法对数组进行排序,并通过串口打印排序过程。
1、常见排序算法实现(1-6选择几个算法练习) 1)问题描述:输入一组关键字序列分别实现下列排序。 (1)实现简单选择排序、直接插入排序和冒泡排序。 (2)实现希尔排序算法。 (3)实现折半插入排序。 ...
使用简单数组实现下面各种排序算法的功能,并进行比较, 排序算法如下: a) 插入排序; b) 希尔排序; c) 冒泡排序; d) 快速排序; e) 简单选择排序; f) 堆排序; g) 归并排序; h) 基数排序(选作); i) 其他; ...
在之前所介绍过的排序方法,都是属于「比较性」的排序法,也就是每次排序时 ,都是比较整个键值的大小以进行排序。 这边所要介绍的「基数排序法」(radix sort)则是属于「分配式排序」(distribution sort),基数...