c语言实现插入排序
2015-05-19 15:38
281 查看
插入排序思想如下,一列数字中将第一个数看作是已排好顺序的,所以i从第二个开始,如果i比第一个数小,那么将i和第一个数字换位置,所以這里我们需要借助一个temp位,来达到两数换位置,在這里,我们将数组Data[0]看作是temp位,以两个数的数组data为例,/假设第二个数比第一个数字小,那么将第二个数字复制到data[0]中,然后将第一个数复制到第二个数中,将data[0]在复制到第一个数data[1]中,data[0]就相当于哨兵,若数组数多于两个,道理也是一样的,一个数字data[i]若比前一个数字data[i-1]小,则复制到data[0]中,然后从data[i-1]依次向前开始做比较,比data[0]大,则往后移动一个,直到比较不成功,便将data[0]中的数字复制到比较不成功的位置。在這个程序里要特别注意--j和j--的区别,一旦for循环比较不成功,j-1之后跳出循环,所以是data[j+1]=dtat[0],在這里,j--和--j效果是一样的。时间复杂度O(n^2),是稳定的排序方法。代码如下:#include <stdio.h>
typedef struct
{
int key;
char name[10];
}Data;
Data ListOld[]={{0,"num0"},{49,"num1"},{38,"num2"},{65,"num3"},{97,"num4"},{76,"num5"},{13,"num6"},{27,"num7"},{49,"num8"}};
void InsertSort(Data *pdata,int n);
void PrintData(Data *pdata,int n);
int main(int argc, char *argv[])
{
printf("Hello, world\n");
InsertSort(ListOld,9);
return 0;
}
void PrintData(Data *pdata,int n)
{
int i;
for(i=1;i<n;i++){
printf("%d,%s ",pdata[i].key,pdata[i].name);
}
printf("\n");
}
void InsertSort(Data *pdata,int n)
{
int i,j;
for(i=2;i<=n;i++){
if(pdata[i].key < pdata[i-1].key)
{
pdata[0] = pdata[i];
for(j=i-1;pdata[0].key < pdata[j].key;--j){
pdata[j+1] = pdata[j];
//printf("%d ",j);说明j是从1开始执行的;
}
pdata[j+1] = pdata[0];
}
}
PrintData(ListOld,9);
}
typedef struct
{
int key;
char name[10];
}Data;
Data ListOld[]={{0,"num0"},{49,"num1"},{38,"num2"},{65,"num3"},{97,"num4"},{76,"num5"},{13,"num6"},{27,"num7"},{49,"num8"}};
void InsertSort(Data *pdata,int n);
void PrintData(Data *pdata,int n);
int main(int argc, char *argv[])
{
printf("Hello, world\n");
InsertSort(ListOld,9);
return 0;
}
void PrintData(Data *pdata,int n)
{
int i;
for(i=1;i<n;i++){
printf("%d,%s ",pdata[i].key,pdata[i].name);
}
printf("\n");
}
void InsertSort(Data *pdata,int n)
{
int i,j;
for(i=2;i<=n;i++){
if(pdata[i].key < pdata[i-1].key)
{
pdata[0] = pdata[i];
for(j=i-1;pdata[0].key < pdata[j].key;--j){
pdata[j+1] = pdata[j];
//printf("%d ",j);说明j是从1开始执行的;
}
pdata[j+1] = pdata[0];
}
}
PrintData(ListOld,9);
}
相关文章推荐
- C语言实现插入排序
- 冒泡排序、插入排序、选择排序--C语言实现
- 简单的C语言插入排序实现代码
- 插入排序(c语言实现)
- (排序)用C语言实现的希尔排序(插入排序)
- C语言中快速排序和插入排序优化的实现
- 算法从排序开始——插入排序(Insertion Sort)C语言及Java实现
- 读《算法导论》我来C语言实现(1)——插入排序
- c语言实现选择排序、冒泡排序、插入排序
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 2-路插入排序(2-way Insertion Sort)的C语言实现
- C语言中快速排序和插入排序优化的实现
- 排序算法的C语言实现-插入排序
- c语言实现插入排序
- 排序算法——插入排序(C语言实现)
- C语言用链表实现插入排序
- 插入排序(C语言实现)
- 用c语言实现插入排序
- 排序算法之插入排序(C语言实现)
- C语言实现插入排序与希尔排序与一些想法