//(对于排序的代码实现后来我会慢慢加上的,现将思想了解到,然后慢慢写代码,并调试)
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的序列调整为“有序”的序列。一般常用的排序有快速排序,希尔排序,箱式排序,堆排序,直接选择排序,基数排序,冒泡排序,归并排序;
快序排序;
原理:首先在序列中寻找一个做为标准的值,然后以它为标准,将小的排在它的左边,大的排在他的右边,然后再将左右两边的分别再次分成两个部分,以标准为分界限重复原来的操作,然后继续,直到左右最多分别只有一个数的时候停止重复,这样就将序列按照了从小到大的顺序排列了。当然,要达到从大到小的顺序也是一样的原理进行操作。
代码:
#include<stdio.h>
void sort(int *a, int left, int right)
{
if(left >= right)
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i < j)
{
while(i < j && key <= a[j]){
j--;
}
a[i] = a[j];
while(i < j && key >= a[i]){
i++;
}
a[j] = a[i];
}
a[i] = key;
sort(a, left, i - 1);
sort(a, i + 1, right);
}
void print(int a[]){
for(int i = 0; i < 8; i++){
printf("%d ",a[i]);
}
printf("\n");
}
int main(){
int a[8] = {10, 20, 14, 61, 81, 41, 23, 41};
print(a);
sort(a, 0, 8);
print(a);
return 0;
}
原理:在序列中选择最小的数将他按顺序和前面的数交换,以达到从小到大的效果;
代码:
#include<stdio.h>
void print(int a[]){
for(int i = 0; i < 8; i++){
printf("%d ", a[i]);
}
printf("\n");
}
void play(int a[]){
int k, min;
for(int i = 0; i < 8; i++){
min = 10000;
for(int j = i; j < 8; j++){
if(a[j] < min){
min = a[j];
k = j;
}
}
a[k] = a[i];
a[i] = min;
}
}
int main(){
int a[8] = {10, 20, 14, 61, 81, 41, 23, 41};
print(a);
play(a);
print(a);
return 0;
}
原理:这是一个在选择排序的基础上进行了优化的结果,先将序列分成几个组,像这样a[0],a[d],a[2d],,,然后a[1],a[1+d],a[1+2d],,,……然后每组分别进行选择排序,排序完成后,就将当前的序列再次分组,现在的d'<d,继续刚才的操作,知道d = 1;结束;此时序列有序;
箱式排序;
原理:箱式排序是先定义一个数组a[m],m的值大于数组的最大值。这样将数组下标作为信息进行排序,当然过程中可能会出现相同的数,所以建议a[i]为一个链式队列,用于保存相同的数,同时还能够先进先出,是的排序稳定;放进数组这个箱子后,按照序号进行读取,排序就成功了;
基数排序:
原理:基数排序是从个位开始向高位进行的排序,当然其本质还是其它排序的应用;例如13,21,36,51,25,42,65第一次排序就是:21,51,42,13,65,36,此时的个位是有序的,然后增加一位,13,21,36,42,51,65,按顺序来,按照数字顺序来进行接数字;最后排序成功;
冒泡排序;
原理:就是将相邻的两个元素进行比较,按照一定条件进行交换,这样使得某些元素像是气泡一样向上冒,称为冒泡排序法;
代码:
#include<stdio.h>
void print(int a[]){
for(int i = 0; i < 8; i++){
printf("%d ", a[i]);
}
printf("\n");
}
void play(int a[]){
for(int i = 0; i < 8; i++){
for(int j = i; j < 7; j++){
if(a[j] > a[j+1]){
int t;
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
}
int main(){
int a[8] = {10, 20, 14, 61, 81, 41, 23, 41};
print(a);
play(a);
print(a);
return 0;
}
原理:归并排序是一种排序后合并在排序的操作思想,用一个例子来说明:1,65,24,15,98,32,10;->{1,65},{15,24},{32,98},{10}->{1,15,24,65},{10,32,98};->{1,10,15,24,32,65,98}排序成功,这就是归并排序的思想;
//(文中的堆排序暂时留下问题)