关于插入排序的实现问题请挑错

海市蜃楼DSG 发布于 2012/09/24 19:32
阅读 98
收藏 0
#include <stdio.h>

int main(void){
int a[8]={3,41,52,26,38,57,9,49};
int i,j,k,key,t;

for(i=1;i<=7;i++){
for(j=i-1;j>0;j--){
if(a[j]>a[i]){t=a[i];a[i]=a[j];a[j]=t;}
}
}

for(i=0;i<=7;i++)  printf("%d\t",a[i]);
}



1.本意是要对数字 a进行排序,但是输出结果并不是有序的,问题出在哪里?
2.     nt a[8]={3,41,52,26,38,57,9,49}  这样子的话,数组a是有几个元素呢?我记得下标从0开始到8应该是9个。但是我改成 a【7】在初始化赋值的话,就会报错,这是为什么呢?
加载中
0
SErHo
SErHo
if (a[j] > a[j+1]) {
    t = a[j+1];
    a[j+1] = a[j];
    a[j] = t;
}

改成这样试试。

a当然是8个元素,下标0到7。

0
billzheng
billzheng

你大概想实现bubble sort,具体看以下代码。关于数组 int a[8]={3,41,52,26,38,57,9,49} . 你申明了数组大小是8,类型是int,数组下标是0到7

void bubbleSort(int numbers[], int array_size)
{
  int i, j, temp;
 
  for (i = (array_size - 1); i > 0; i--)
  {
    for (j = 1; j <= i; j++)
    {
      if (numbers[j-1] > numbers[j])
      {
        temp = numbers[j-1];
        numbers[j-1] = numbers[j];
        numbers[j] = temp;
      }
    }
  }
}

int _tmain(int argc, _TCHAR* argv[])
{
  int a[8]={3,41,52,26,38,57,9,49};
  bubbleSort(a,8);
  return 0;
}

这个bubblesort不是性能最高的冒泡排序,改进型的冒泡排序看这个链接

http://www.algolist.net/Algorithms/Sorting/Bubble_sort

 

 

0
冬夜静思

呵呵,

1. 这不是插入排序,如楼上所说;

2. 楼主思路还是混路的,理清思路再写代码,往往事半功倍。

0
中山野鬼
中山野鬼
j >= 0,而不是 j > 0
0
中山野鬼
中山野鬼

你这个代码写的。既然是8,就用8描述,为什么要7?正常代码如下写:

#include <stdio.h>

#define BUF_SIZE 8
#define SWAP(a,b) do {int t; t = a; a = b; b = t;}while (0)
int buf[BUF_SIZE]={0,1,2,3,4,5,6,7};
void sort(int *p,int n){
   int i,j;
   for (i = 0 ; i < n ; i++){
      for (j = i+1; j < n ; j++){
         if (p[i] > p[j]){
            SWAP(p[i],p[j]);
         }
      }
   }
}

int main(...
...
    sort(buf,BUF_SIZE);
...

返回顶部
顶部