教你几种排序的基本算法
2013-05-12 16:27
399 查看
现有基本的数据输出:
写出最基本的main函数体:
之后进行我们的基本的排序算法:
运行结果如下:
运行结果如下:
运行结果如下:
运行结果如下:
运行结果如下:
未完!待续!!!!
void OutPutSortResult(int num[],int length_num,int index) { printf("this is %03d-th!\t",index); for(int i=0;i<length_num;i++) printf("%d ",num[i]); printf("\n"); }
写出最基本的main函数体:
int main() { int num[] = {2,1,3,4,6,5,9,8,7,10,-1,20,300,0,79,81,45,99,103,46}; int len = sizeof(num)/sizeof(int),i=0; printf("原始数据\t"); for(i=0; i<len-1; i++) printf("%d ",num[i]); printf("%d\n\n",num[len-1]); MyBubbleMoreAdvanceSort(num,len,0); printf("\n排序之后的数据\t"); for(i=0; i<len-1; i++) printf("%d ",num[i]); printf("%d\n",num[len-1]); return 0; }
之后进行我们的基本的排序算法:
/* 插入排序: 该算法对较小的数据量的排序作用还是很不错的 该算法的执行过程与我们在打牌的过程挺像的,在打牌时 我们左手是空的,所有的牌都面朝下放在桌面上, 然后,一张一张的拿来插到指定的位置 */ void MyInsertSort(int num[],int length_num, int sort_type/*0:small to big ;>=1:big to small*/) { for(int i=0; i<length_num; i++) { int j = 0; for(j=0; j<i; j++) { if(sort_type == 0) { if(num[j]>num[i]) break; } else { if(num[j]<=num[i]) break; } } if(j<i) { int temp = num[j]; num[j++] = num[i]; for(; j<=i; j++) { num[i] = num[j]; num[j] = temp; temp = num[i]; } } OutPutSortResult(num,length_num,i); } }
运行结果如下:
/* 冒泡排序: */ void MyBubbleSort(int num[],int length_num,int sort_type) { int i=0,j=0,k=0,flag = 1; for(i=0; i<length_num-1&&flag==1; i++) { flag = 0; for(j=0; j<length_num-1-i; j++) { if(num[j+1]<num[j] && sort_type == 0) { int temp = num[j+1]; num[j+1] = num[j]; num[j] = temp; flag = 1; } else { if(num[j+1]>num[j] && sort_type != 0) { int temp = num[j+1]; num[j+1] = num[j]; num[j] = temp; flag = 1; } } } OutPutSortResult(num,length_num,i); } }
运行结果如下:
/* 改进的冒泡排序,对左右进行双向排序 */ void MyBubbleMoreAdvanceSort(int num[],int length_num,int sort_type) { int i=0,j=0,k=0; int left = 0,right = length_num-1; bool left_flag = true,right_flag = true; for(i=left; i<=right && (left_flag == true || right_flag == true); i++) { left_flag = false; right_flag = false; for(j=left,k=right; j<right || k>left; j++,k--) { /*大数沉底*/ if(num[j] > num[j+1] && sort_type == 0) { int temp = num[j+1]; num[j+1] = num[j]; num[j] = temp; right_flag = true; } else { if(num[j] < num[j+1] && sort_type != 0) { int temp = num[j+1]; num[j+1] = num[j]; num[j] = temp; right_flag = true; } } /*小数上升*/ if(num[k] < num[k-1] && sort_type == 0) { int temp = num[k]; num[k] = num[k-1]; num[k-1] = temp; left_flag = true; } else { if(num[k] > num[k-1] && sort_type != 0) { int temp = num[k]; num[k] = num[k-1]; num[k-1] = temp; left_flag = true; } } } right--; left++; OutPutSortResult(num,length_num,i); } }
运行结果如下:
/* 选择排序: */ void MySelectSort(int num[],int length_num,int sort_type) { int i=0,j=0,k=0,cur_index=0; for(i=0; i<length_num-1; i++) { cur_index = i; for(j=i+1; j<length_num; j++) { if(num[j]<num[cur_index] && sort_type == 0) cur_index = j; else { if(num[j]>num[cur_index] && sort_type != 0) cur_index = j; } } if(i != cur_index) { int temp = num[i]; num[i] = num[cur_index]; num[cur_index] = temp; } OutPutSortResult(num,length_num,i); } }
运行结果如下:
/* 希尔(shell)排序: */ void MyShellSort(int num[],int length_num,int sort_type) { int i=0,j=0,k=0,index = 0; int gap = length_num/2; while(gap>0) { for(k=0; k<gap; k++) { for(i=k+gap; i<length_num; i+=gap) { for(j=i-gap; j>=k; j-=gap) { if(num[j]>num[j+gap] && sort_type == 0) { int temp = num[j]; num[j] = num[j+gap]; num[j+gap] = temp; } else { if(num[j]<num[j+gap] && sort_type != 0) { int temp = num[j]; num[j] = num[j+gap]; num[j+gap] = temp; } } } OutPutSortResult(num,length_num,++index); } } gap /= 2; } }
运行结果如下:
未完!待续!!!!
相关文章推荐
- 几种基本的排序算法:选择排序、插入排序、冒泡排序
- 【转】几种基本的排序算法演示
- 算法 -- 几种基本排序深入探究
- 算法 -- 几种基本排序深入探究
- 教你几种排序的基本算法
- 【经典算法】基本的排序算法:插入排序
- 八大经典排序算法基本思想及代码实现(Python、C++)
- 关于基本排序的总结选择排序: 算法是: ① 第1趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换。 ③第i趟排序 第i趟排序开始时,当前有序区和无序区
- java 基本算法之归并排序实例代码
- 基础算法学习(一)__几种排序:选择、插入、冒泡和快排
- 常用算法总结之排序(二)----基本冒泡
- Python排序搜索基本算法之希尔排序实例分析
- java数据结构和算法---基本查找排序
- 总结近期所学的几种排序方法的基本思想
- 快速排序_算法基本思想及实现
- 算法入门-快速排序-基本快速排序方法
- java中几种基本算法思想
- #旧代码# 基本算法练习:常见排序/KMP字符串查找/链表反转
- 【Python排序搜索基本算法】之插入排序
- 几种基本排序的java实现