插入排序是指,从前往后依次排好序,后面的元素插进来的时候,就找到比她小的,然后后面的往后移,插入进去。
i从1开始往后,j在它的前面,依次往前找大的往后移,然后把元素插入进去。
void insert( int number[], int count)
{
int temp,j,m;
for (int i = 1;i < count;i++)
{
temp = number[i];
for ( j= i-1;number[j]>temp&&j >= 0;j--)
number[j+1] = number[j];
number[j+1] = temp;
for ( m=0;m< count;m++)
printf("%d,",number[m]);
printf("\n");
}
printf("insert 排序后");
printf("[");
for (int i=0;i<count;i++)
{
printf("%d,",number[i]);
}
printf("]");
}
快速排序复杂,要用到递归的思想,思路混乱,找资料再写出来。
两个i,j,一个i++往后,一个j--往前,选择一个比较的对象,选第一个这里,然后交换。
void quick(int *number,int first,int last)
{
printf("开始调用\n");
int temp,j,m,i;
if(first<last)
{
i=first;
j=last-1;
temp=number[i];
while(i<j)
{
while(i<j&&temp<number[j])
j--;
if (i<j)
{
number[i]=number[j];
number[j]=temp;
i++;
}
while(i<j&&temp>number[i])
i++;
if (i<j)
{
number[j]=number[i];
number[i]=temp;
j--;
}
printf("[");
for (int i=0;i<last;i++)
{
printf("%d,",number[i]);
}
printf("]");
printf("\n");
}
number[i]=temp;
printf("调用左边的\n");
quick(number,first,i);
printf("调用右边的\n");
quick(number,i+1,last);
}
}
要么是交换,要么是移动,记住的就是不能把值给冲掉了。