排序算法
分类
1、冒泡排序(Bubble Sort)
2、选择排序(Selection Sort)
4、希尔排序(Shell Sort)
5、归并排序(Merge Sort)
6、快速排序(Quick Sort)
7、堆排序(Heap Sort)
8、计数排序(Counting Sort)
9、桶排序(Bucket Sort)
10、基数排序(Radix Sort)
冒泡排序
基本思想
1.冒泡排序就是将相邻的两个数比较大小,较大的往后,较小的往前.
算法描述
1.比较相邻的两个数,如果第一个比第二个大,就把他们互换位置
2.每一对相邻元素都要进行比较,这样一次循环后,最后一位的数就会使最大的
3.再次对除了最后一位的数之外的数进行相邻比较
代码
int []a={5,7,2,3,8};
//52378
//23578
//23578
//23578
for (int i = 0; i < a.length-1; i++){
for (int j = 0; i < a.length-1-i; j++){
if(a[j]>a[aj+1]){
int c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
}
}
选择排序
基本思想
首先在未排序的数列中找到一个最大(小)数,将他放到排序序列的起始位置,然后继续从未排序的序列中寻找最大(小)数,将其放在已排序序列的末尾
算法描述
1.从第一个起始位置开始,往后逐步查询,找到一个最大(小)数,将这个数与起始位置的数交换,并将这个最大(小)数放在有序序列,
2.从刚才起始位置数的下一个数开始,往后逐步查询,找到一个最大(小)数,将这个数与这个起始位置的数交换
3.重复上述步骤
代码
int []a={5,7,2,3,8};
// 8 7 2 3 5 a0
// 8 7 2 3 5 a1
// 8 7 5 3 2 a2
// 8 7 5 3 2 a3
for (int i = 0; i < a.length-1; i++){
for (int j = i; i < a.length-1-i; j++){
int num=i;
if(a[j]>a[num]){
num=j;
}
int c=a[i];
a[i]=a[num];
a[num]=c;
}
}
插入排序
基本思想
在要排序的一组数中,假定前n-1个数已经排好了序,现在将第n个数插入到前面的有序序列中,使得这n个数排好顺序,如此循环.
算法描述
1.从第一个元素开始,该元素可以认为已经被排序;
2.取出下一个元素,在已经排序的序列里从后往前比较
3.如果以排序中的元素大于该元素,将以排序的元素后移
4.重复3,直到已排序中元素小于或等于该元素;
5.插入该位置
6.重复2-5
代码
int []a={5,7,2,3,8};
//57238
//57238
//25738
//23578
for (int i = 0; i < a.length-1; i++){
int num=a[i+1];
int c=i;
while(c>=0){
if(num<a[c]){
a[c+1]=a[c];
c--;
}
}
a[c+1]=num;
}