算法:插入排序
插入排序的算法分析:(未完)
可参考的排序算法的博客: http://blog.csdn.net/cjf_iceking/article/details/7916194
这是剪贴的别人的插入排序的 函数代码。
#include <iostream> #include <string> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; void InsertSort(int* pDataArray, int iDataNum) { for (int i = 1; i < iDataNum; i++) //从第2个数据开始插入 { int j = 0; while (j < i && pDataArray[j] <= pDataArray[i]) //寻找插入的位置 j++; if (j < i) //i位置之前,有比pDataArray[i]大的数,则进行挪动和插入 { int k = i; int temp = pDataArray[i]; while (k > j) //挪动位置 { pDataArray[k] = pDataArray[k-1]; k--; } pDataArray[k] = temp; //插入 } } } int main() { int n; int a[200]; int i; cin>>n; for(i=0; i<n; i++) { cin>>a[i]; } InsertSort(a, n); for(i=0; i<n; i++) { if(i==n-1) cout<<a[i]<<endl; else cout<<a[i]<<" "; } return 0; }
这是我自己的插入函数 模板代码, 待排序数组的数据元素从下标1开始存储,一直存储到下标n。
这个插入函数会将a[0] 设置成一个监测哨, 这样做的好处是:减少交换次数,减少了运行时间。
SDUT 排序
Time Limit: 1000ms Memory limit: 32678K 有疑问?点这里^_^
题目描述
给你N(N<=100)个数,请你按照从小到大的顺序输出。
输入
输入数据第一行是一个正整数N,第二行有N个整数。
输出
输出一行,从小到大输出这N个数,中间用空格隔开。
示例输入
5 1 4 3 2 5
示例输出
1 2 3 4 5
//插入排序 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> using namespace std; void Insert_sort(int a[], int n) { int i, j; for(i=2; i<=n; i++) { if( a[i]<a[i-1] ) { a[0]=a[i]; for(j=i-1; a[0]<a[j]; j--) { a[j+1] = a[j]; } a[j+1]=a[0]; } } } int main() { int n; int i, j; int a[100]; while(scanf("%d", &n)!=EOF) { for(i=1; i<=n; i++) { scanf("%d", &a[i] ); } Insert_sort(a, n); for(j=1; j<=n; j++) { printf("%d%c", a[j], j==n?'\n':' ' ); } } return 0; }
HDU 2020 绝对值排序
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 42143 Accepted Submission(s): 20476
Problem Description
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
Sample Input
3 3 -4 2
4 0 1 2 -3
0
Sample Output
-4 3 2
-3 2 1 0
算法: 使用结构体,x保留原数值,y保留该数的绝对值。 利用插入排序对结构体元素y进行排序,然后输出 排序后的的结构体的x元素。
//插入排序 #include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> struct N { int x; int y; }a[200]; void Insert_sort( int n) { int i, j; for(i=2; i<=n; i++) { if( a[i].y>a[i-1].y ) { a[0]=a[i]; for(j=i-1; a[0].y>a[j].y; j--) { a[j+1] = a[j]; } a[j+1]=a[0]; } } } int main() { int n, dd; int i, j; while(scanf("%d", &n)!=EOF) { for(i=1; i<=n; i++) { scanf("%d", &dd ); a[i].x = dd; a[i].y = abs(dd); } Insert_sort(n); for(j=1; j<=n; j++) { printf("%d%c", a[j].x, j==n?'\n':' ' ); } } return 0; }