89.神州数码、华为、东软笔试题
3.经典排序算法
1.2005 年11 月15 日华为软件研发笔试题。实现一单链表的逆转。
2.编码实现字符串转整型的函数(实现函数atoi 的功能),据说是神州数码笔试题。如将字符串”+123”123, ”-0123”-123, “123CS45”123, “123.45CS”123, “CS123.45”0
3.快速排序
分析和代码:
1.链表逆序,从链表中的第二个节点开始,依次将节点插入到头结点后面,完成逆序。
void reverseList(node* head)
{
if (head == NULL || head->next == NULL) return; //无效的head节点或者空链表
node* pPrevious = head->next;
node* pCurrent=pPrevious->next;
while (pCurrent != NULL) //从链表中的第二个节点开始,依次将节点插入到头结点后面,完成逆序
{
pPrevious->next = pCurrent->next;
pCurrent->next = head->next;
head->next = pCurrent;
pCurrent = pPrevious->next;
}
}
2.atoi
int atoi(const char* str)
{
if (str == NULL)
{
cout << "null string,error!" << endl;
return -1;
}
int result = 0;
char sign='+';
while (*str == ' ') ++str;
if (*str == '-' || *str == '+')
sign = *str++;
while (*str != '\0')
{
if (isdigit(*str))
result = result * 10 + *str++ - '0';
else
{
cout << "illegal number error!" << endl;
return -1;
}
}
return sign == '+' ? result : -result;
}
3.经典排序算法
void quickSort(int data[], int length)
{
if (length < 2) return;
int i = 0, j = length - 1;
int x = data[0];
while (i < j)
{
for (; i < j; j--)
if (data[j] < x)
{
data[i++] = data[j];
break;
}
for (; i < j;i++)
if (data[i]>x)
{
data[j--] = data[i];
break;
}
}
data[i] = x;
quickSort(data, i);
quickSort(data + i + 1, length-i-1);
}