基础练习 数列排序
来源:互联网 发布:家庭装修设计软件 编辑:程序博客网 时间:2024/06/05 04:11
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
内部排序,题目简单,而我又不擅长讲解基础知识,只能将代码附上,并对其中多处做了注释。这里采用了几种我所熟悉的排序方法,希望能对初学者有所帮助。
冒泡排序
#include<stdio.h>void bubble_sort(int* list, int n){ //list:所传数组;n:数组长度 int i, j, temp, flag; //flag:保存所需排序的最后位置,避免重复遍历已经排列好的元素 for(i = n - 1; i > 0;){ flag = 0;// for(j = 0; j < i; j++){ if(list[j] > list[j + 1]){ flag = j; temp = list[j]; list[j] = list[j + 1]; list[j + 1] = temp; } } i =flag;//flag之后的元素均已排序完毕,无需再次遍历 }}int main(){ int n, i; scanf("%d", &n); int list[n]; for(i = 0; i < n; i++) scanf("%d", &list[i]); bubble_sort(list, n); for(i = 0; i < n; i++) printf("%d ", list[i]); printf("\n"); return 0;}
插入排序
这里采用直接插入排序
#include<stdio.h>void insert_sort(int* list, int n){ int i, j, temp; for(i = 1; i < n; i++){ for(j = i - 1; j >= 0 && list[j] > list [i]; j--, i--){ temp = list[j]; list[j] = list[i]; list[i] = temp; } }}int main(){ int n, i; scanf("%d", &n); int list[n]; for(i = 0; i < n; i++) scanf("%d", &list[i]); insert_sort(list, n); for(i = 0; i < n; i++) printf("%d ", list[i]); printf("\n"); return 0;}
快速排序
#include<stdio.h>void quick_sort(int* list, int left, int right){ //左边界和右边界指向同一元素,循环结束 if(left >= right) return; //将第一个元素设置为基准元素 int target = list[left]; int i = left, j = right; while(i != j){ //从右往左找比基准元素小的元素 while(list[j] >= target && i < j) j--; //从左往右找比基准元素大的元素 while(list[i] <= target && i < j) i++; //找到之后两个元素交换位置 if(i < j){ int temp = list[i]; list[i] = list[j]; list[j] = temp; } } list[left] = list[i]; list[i] = target; quick_sort(list, left, i - 1);//对左边排序完成的继续排序 quick_sort(list, i + 1, right);//对右边排序完成的继续排序 }int main(){ int n, i; scanf("%d", &n); int list[n]; for(i = 0; i < n; i++) scanf("%d", &list[i]); //函数中我定义的是边界,即数组下标,故第三个参数是 n - 1 //quick_sort(list, 0, n - 1); for(i = 0; i < n; i++) printf("%d ", list[i]); return 0;}
阅读全文
0 0
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- 基础练习 数列排序
- swift项目导入 oc的framework出现 xxx file not found
- java的char类型可以储存汉字吗
- Hive中创建表(hive的使用和MySQL的使用很相似)
- Quartz使用总结
- 多维数组和广义表
- 基础练习 数列排序
- hdu 2177 取(2堆)石子游戏(威佐夫博弈)
- 机器学习基石-03-1-learning with different Output Space
- 技术人员的危机感
- Android VideoView播放视频竖屏切换横屏有黑白边无法全屏
- vs中debug版本何release的区别
- csdn如何转载
- 十进制转二进制含代码
- c# List.FindAll和for的性能对比